"realloc(): invalid next size" 多次成功运行后
"realloc(): invalid next size" after multiple successful runs
在数组已经存储了用户输入的多行后,我一直收到此错误,这告诉我它可能由于以下行而损坏了内存:
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);
还不清楚为什么要在 潜在 break
之前为 poemArray
做初始 malloc
。这样你最终可能会得到 poemArray
作为大小为 1 的未初始化数组。让它未初始化有什么意义?
此外,请注意 realloc
旨在正确处理空指针作为其第一个参数。在这种情况下,realloc
本质上等同于 malloc
。通过利用 realloc
的这一特性,您可以消除对 count == 0
状态的专用处理,从而得到更加紧凑和优雅的代码。
P.S。为什么对 malloc
的某些调用包含显式转换,而其他调用则不包含?无论如何,在 C 中封装内存分配函数的结果是没有意义的。
在数组已经存储了用户输入的多行后,我一直收到此错误,这告诉我它可能由于以下行而损坏了内存:
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);
还不清楚为什么要在 潜在 break
之前为 poemArray
做初始 malloc
。这样你最终可能会得到 poemArray
作为大小为 1 的未初始化数组。让它未初始化有什么意义?
此外,请注意 realloc
旨在正确处理空指针作为其第一个参数。在这种情况下,realloc
本质上等同于 malloc
。通过利用 realloc
的这一特性,您可以消除对 count == 0
状态的专用处理,从而得到更加紧凑和优雅的代码。
P.S。为什么对 malloc
的某些调用包含显式转换,而其他调用则不包含?无论如何,在 C 中封装内存分配函数的结果是没有意义的。