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]”...

我从来没有遇到过这种类型的错误,我在谷歌上搜索了几个小时,但在我的情况下没有什么真正有趣的......请帮助:)


现在我有另一个错误:

*** 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 回答