gpt4 book ai didi

c - "realloc(): invalid next size"多次成功运行后

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:10 24 4
gpt4 key购买 nike

在数组已经存储了来自用户输入的多行之后,我一直收到此错误,这告诉我它可能由于以下行而损坏了内存:

    poemArray = (char **)realloc(poemArray, count + 1);

知道我做错了什么吗?非常感谢具体的解决方案!

    line = (char *)malloc(MaxLineLen);

fgets(line, MaxLineLen, stdin);
/*Get current line from user input*/
if(count == 0)
{
poemArray = malloc(sizeof(char *));
printf("1\n");
}
if(line[0] == '.'){
break;
}
line = (char *)realloc(line, strlen(line));

printf("2\n");

if(count != 0)
{
poemArray = (char **)realloc(poemArray, count + 1);
}
poemArray[count] = line;

++count;

最佳答案

这个

poemArray = (char **)realloc(poemArray, count + 1);

实际上应该是

poemArray = realloc(poemArray, (count + 1) * sizeof(char *));

还有这个

line = (char *)realloc(line, strlen(line));

应该是

line = realloc(line, strlen(line) + 1);

还不清楚您为什么要为 poemArray 执行初始 malloc 潜在的 break。这样,您最终可能会得到 poemArray 作为大小为 1 的未初始化数组。让它未初始化有什么意义?


此外,请注意 realloc 旨在正确处理空指针作为其第一个参数。在这种情况下,realloc 本质上等同于 malloc。通过利用 realloc 的这一特性,您可以消除对 count == 0 状态的专门处理,从而得到更加紧凑和优雅的代码。

附言为什么某些对 malloc 的调用包含显式转换,而其他调用则不包含?无论如何,用 C 语言封装内存分配函数的结果是没有意义的。

关于c - "realloc(): invalid next size"多次成功运行后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41990946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com