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 に答える