在数组已经存储了来自用户输入的多行后,我一直收到此错误,这告诉我由于该行可能已损坏内存:
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;
答案 0 :(得分:2)
此
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);
在潜在malloc
之前,还不清楚为什么要对poemArray
进行初始break
。{这样你可能最终得到poemArray
作为未初始化的大小为1的数组。将它取消初始化是什么意思?
此外,请注意realloc
旨在正确处理空指针作为其第一个参数。在这种情况下,realloc
基本上等同于malloc
。通过利用realloc
的这一特性,您可以消除count == 0
状态的专用处理,从而最终获得更紧凑和优雅的代码。
P.S。为什么有些malloc
的来电包括明确的演员,而其他人则不知道?无论如何,在C中包含内存分配函数的结果是没有意义的。