"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 中封装内存分配函数的结果是没有意义的。