free(): 无效指针 在 fclose() 处中止(核心转储);

free(): invalid pointer Aborted (core dumped) at fclose();

提问人:Kalyan Sreekar 提问时间:2/7/2022 更新时间:2/7/2022 访问量:1060

问:

我尝试调用此函数两次,当我第二次调用它时,它在打印行和 clm 后给了我这个错误

void datasize(char fl_name[], int* rw, int* clm)
{
    FILE* fl;

    fl = fopen(fl_name, "r+");
    char fldata[100];
    int i = 0, il;
    int j = 0, jl = 0;

    if (fl==NULL)
    {
        printf("%s doesnot exists in the current folder (folder of the executable)\n",fl_name);
    }
    while (fgets(fldata, 100, fl))
    {
        if (fldata[0] > 47 && fldata[0] < 60)
        {
            j = 0;
            char* tokn = strtok(fldata, ",");
            while (tokn)
            {
                if (((tokn[0] > 47) && (tokn[0] < 60)) || tokn[0] == '-')
                {
                    j++;
                }
                tokn = strtok(NULL, ",");
            }
            jl = (j > jl) ? j : jl;
            while (j <= jl)
            {
                j++;
            }
            i++;
        }
    }
    il = i;
    *rw = il;
    *clm = jl;
    printf("\n");
    printf("row : %d clm : %d", il, jl);
    printf("\n");
    fclose(fl);
}

输出:

Reading Line Data.....
row : 20 clm : 7
Done
Reading Bus Data.....
row : 14 clm : 9
free(): invalid pointer
Aborted (core dumped)

Reading Data 和 Done 之间的部分具有函数调用。我们可以看到它打印了行和 clm,但它在 fclose() 处给出了这个错误;

如果有人引导我朝着正确的方向前进,我将不胜感激。谢谢。

C 文件 fclose

评论

2赞 Adrian Mole 2/7/2022
我想你需要在你的块中添加一个语句。否则,您最终会调用该指针。return;if (f1 == NULL) { ...fcloseNULL
0赞 Kalyan Sreekar 2/7/2022
感谢您的回复,我刚刚尝试过它再次出现相同的错误。
1赞 kaylum 2/7/2022
请提供完整的代码作为最小的可重现示例。也就是说,提供重现问题所需的任何其他代码。根本原因可能不在所示代码中(例如,可能是此处触发的其他地方的内存损坏)。main
0赞 Kalyan Sreekar 2/7/2022
我使用了 2 个函数,我在两个函数中的同一指针上调用了 fclose。该问题现已解决。谢谢。
2赞 kaylum 2/7/2022
正如我们猜测的那样 - 问题出在我们看不到的代码中。下次请务必发布一个最小的可重现示例。虽然你给出的解释并没有真正意义。该变量只能在此函数中访问,那么它如何在其他任何地方访问呢?意味着你还没有真正找到根本原因。请注意,当您更改不相关的代码时,内存损坏等错误可能会消失,如果您尚未实际修复它,则随时会重新出现。flfclose

答: 暂无答案