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



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

    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 语言封装是没有意义的。

最新更新