鱼C论坛

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

realloc报错,怎么去修改啊?

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

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

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

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

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

    // 重新分配内存空间,长度增加一倍
    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[i] = 'x';
        printf("%c ", newArray[i]);
    }
    printf("\n");

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

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0] = 'a';
    array[1] = 'b';
    array[2] = 'c';
    array[3] = '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[i] = 'x';
        printf("%c ", newArray[i]);
    }
    printf("\n");

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

    return 0;
}

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-27 10:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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