0

実行時に C プログラムでエラーが発生しました。「ダブルフリーまたは破損」エラーに関するものをいくつか見つけましたが、関連するものは何もありません。

これが私のコードです:

void compute_crc32(const char* filename, unsigned long * destination)
{
  FILE* tmp_chunk = fopen(filename, "rb");
  printf("\n\t\t\tCalculating CRC...");
  fflush(stdout);
  Crc32_ComputeFile(tmp_chunk, destination);
  printf("\t[0x%08lX]", *destination);
  fflush(stdout);
  fclose(tmp_chunk);
  printf("\t[ OK ]");
  fflush(stdout);
}

どうやら

fclose(tmp_chunk);

この glibc エラーが発生します。

*** glibc detected *** ./crc32: double free or corruption (out): 0x09ed86f0 ***

======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb763cee2]
/lib/i386-linux-gnu/libc.so.6(fclose+0x154)[0xb762c424]
./crc32[0x80498be]
./crc32[0x8049816]
./crc32[0x804919c]
./crc32[0x8049cc2]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75e04d3]
./crc32[0x8048961]

コンソール出力では、最後の CRC は表示されますが、最後の "[ OK ]" は表示されません...

この種のエラーは一度もありませんでした.Googleで何時間も検索しましたが、私の場合は本当に興味深いものは何もありません...助けてください:)


今、私は別のエラーがあります:

*** glibc detected *** ./xsplit: free(): invalid next size (normal): 0x095a66f0 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xb7647ee2]
/lib/i386-linux-gnu/libc.so.6(fclose+0x154)[0xb7637424]
./xsplit[0x80497f7]
./xsplit[0x804919c]
./xsplit[0x8049cd6]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75eb4d3]
./xsplit[0x8048961]

これはなに ?道に迷いました... :(

4

1 に答える 1

2

*** glibc detected *** ./crc32: double free or corruption

glibc は、ヒープが破損していることを示しています。

Linux でこのような破損を検出するツールはValgrindAddressSanitizerです。

おそらく、それらのいずれかがあなたの問題が何であるかをすぐに教えてくれるでしょう。

于 2013-01-08T04:28:23.123 に答える