hanghanga 发表于 2024-2-10 11:28:31

realloc报错,怎么去修改啊?

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

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

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

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

    // 使用扩展后的数组
    for (size_t i = 0; i < 2 * originalLength; i++) {
      newArray = 'x';
      printf("%c ", newArray);
    }
    printf("\n");

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

    return 0;
}

FishC 发表于 2024-2-10 11:28:47

realloc函数的第一个参数是一个指针,表示要重新分配内存空间的对象。在你的代码中,你传递了一个字符数组的名字array给realloc函数,这是不正确的。realloc函数需要操作堆上的内存,而不是栈上的内存。因此,你需要使用malloc函数来动态地分配内存。

下面是修改后的代码:

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

int main() {
    // 原始数组
    char* array = (char*)malloc(4 * sizeof(char));
    array = 'a';
    array = 'b';
    array = 'c';
    array = 'd';
    size_t originalLength = 4;

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

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

    // 使用扩展后的数组
    for (size_t i = 0; i < 2 * originalLength; i++) {
      newArray = 'x';
      printf("%c ", newArray);
    }
    printf("\n");

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

    return 0;
}

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: realloc报错,怎么去修改啊?