每当我在最后用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);
答案 0 :(得分:0)
问题可能出在本节:
/* ... read in inputFile ... */
你有一些破坏堆的代码。溢出阵列是典型的原因。腐败发生时很少检测到堆损坏。只有在以后,当某些代码分配或释放内存时,和内置了一些基本的堆运行状况验证。就像fclose()一样。
答案 1 :(得分:0)
要检测完全代码破坏堆的位置,如果您在Linux上运行,则应使用valgrind。它易于使用:
valgrind ./myprog arguments ...
并将从发生错误读取或写入的确切位置为您提供堆栈跟踪。
Valgrind可以从主要的Linux发行版中获得,也可以从源代码构建。