鱼C论坛

 找回密码
 立即注册
查看: 1246|回复: 1

realloc报错,怎么去修改啊?

[复制链接]
发表于 2024-2-10 11:28:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
realloc那一行会报错,怎么去修改啊?
  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main() {
  4.     // 原始数组
  5.     char array[] = {'a', 'b', 'c', 'd'};
  6.     size_t originalLength = sizeof(array) / sizeof(array[0]);

  7.     // 重新分配内存空间,长度增加一倍
  8.     char* newArray = (char*)realloc(array, 2 * originalLength * sizeof(char));
  9.     if (newArray == NULL) {
  10.         printf("内存重新分配失败\n");
  11.         exit(1);
  12.     }

  13.     // 检查指针是否仍然有效
  14.     if (newArray != array) {
  15.         // 如果指针发生变化,释放原始数组的内存
  16.         free(newArray);
  17.     }

  18.     // 使用扩展后的数组
  19.     for (size_t i = 0; i < 2 * originalLength; i++) {
  20.         newArray[i] = 'x';
  21.         printf("%c ", newArray[i]);
  22.     }
  23.     printf("\n");

  24.     // 释放扩展后的数组内存
  25.     free(newArray);

  26.     return 0;
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-2-10 11:28:47 | 显示全部楼层
realloc函数的第一个参数是一个指针,表示要重新分配内存空间的对象。在你的代码中,你传递了一个字符数组的名字array给realloc函数,这是不正确的。realloc函数需要操作堆上的内存,而不是栈上的内存。因此,你需要使用malloc函数来动态地分配内存。

下面是修改后的代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main() {
  4.     // 原始数组
  5.     char* array = (char*)malloc(4 * sizeof(char));
  6.     array[0] = 'a';
  7.     array[1] = 'b';
  8.     array[2] = 'c';
  9.     array[3] = 'd';
  10.     size_t originalLength = 4;

  11.     // 重新分配内存空间,长度增加一倍
  12.     char* newArray = (char*)realloc(array, 2 * originalLength * sizeof(char));
  13.     if (newArray == NULL) {
  14.         printf("内存重新分配失败\n");
  15.         exit(1);
  16.     }

  17.     // 检查指针是否仍然有效
  18.     if (newArray != array) {
  19.         // 如果指针发生变化,释放原始数组的内存
  20.         free(array);
  21.     }

  22.     // 使用扩展后的数组
  23.     for (size_t i = 0; i < 2 * originalLength; i++) {
  24.         newArray[i] = 'x';
  25.         printf("%c ", newArray[i]);
  26.     }
  27.     printf("\n");

  28.     // 释放扩展后的数组内存
  29.     free(newArray);

  30.     return 0;
  31. }
复制代码


在这个修改后的代码中,我使用了malloc函数来分配初始数组的内存空间,并手动将字符元素赋值给数组。然后,我将指向这个数组的指针传递给realloc函数进行重新分配。最后,在循环中,我使用newArray[i] = 'x'将字符'x'赋值给数组元素,并打印出结果。

请注意,在释放内存时,你应该使用free函数释放newArray指向的内存,而不是array指向的内存。因为realloc函数可能在重新分配内存时返回一个新的指针,所以你需要检查newArray是否与array相等,以确定是否需要释放原始数组的内存。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-8 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表