在数组已经存储了来自用户输入的多行后,我不断收到此错误,这告诉我它可能由于该行而损坏了内存:
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("1n");
}
if(line[0] == '.'){
break;
}
line = (char *)realloc(line, strlen(line));
printf("2n");
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
状态的专用处理,从而最终获得更紧凑和优雅的代码。
附言为什么有些调用malloc
包括明确的强制转换,而另一些则没有?无论如何,将内存分配函数的结果用 C 语言封装是没有意义的。