不能在输出流上使用fclose,输入流就可以了

时间:2010-05-09 09:43:53

标签: c glibc fclose

每当我在最后用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);

2 个答案:

答案 0 :(得分:0)

问题可能出在本节:

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

你有一些破坏堆的代码。溢出阵列是典型的原因。腐败发生时很少检测到堆损坏。只有在以后,当某些代码分配或释放内存时,内置了一些基本的堆运行状况验证。就像fclose()一样。

答案 1 :(得分:0)

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

valgrind ./myprog arguments ...

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

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