1

每当我在最后运行我的程序fclose(outputFile); 时,都会出现错误。glibc 检测到...损坏的双链表

不过,令人困惑的是,我在它的fclose(inputFile);正上方,它工作正常。有什么建议么?

FILE* inputFile = fopen(fileName, "r");
if (inputFile == NULL)
{
    printf("inputFile did not open correctly.\n");
    exit(0);
}
FILE* outputFile = fopen("output.txt", "wb");
if (outputFile == NULL)
{
    printf("outputFile did not open correctly.\n");
    exit(0);
}

/* ... read in inputFile ... */
/* ... some fprintf's to outputFile ... */

fclose(inputFile);
fclose(outputFile);
4

2 回答 2

0

问题可能位于此部分:

 /* ... read in inputFile ... */

你有一些破坏堆的代码。数组溢出是典型的原因。在发生损坏时很少检测到堆损坏。只有稍后,当一些代码分配或释放内存内置一些基本的堆健康验证时。就像 fclose() 一样。

于 2010-05-09T13:16:04.210 回答
0

准确检测代码损坏堆的位置,如果您在 Linux 上运行,则应使用valgrind。它易于使用:

valgrind ./myprog arguments ...

并将从发生错误读取或写入的确切点为您提供堆栈跟踪。

Valgrind 可以从主要的 Linux 发行版中获得,或者您可以从源代码构建。

于 2010-05-09T15:46:57.997 回答