0

我有一个奇怪的问题,到目前为止我还没有遇到过。

我创建了两个线程,每个线程基本上都是打开aaFILE*把一些数据写入磁盘。现在,写入部分本身不会导致运行时问题(虽然输出似乎已损坏),但是当我关闭这两个单独线程中的两个不同时,所有的地狱都会崩溃。 FILE*

我看到一个线程_IO_buf_base指向,0x7ffff66d3000而另一个线程_IO_write_end指向0x7ffff66d3000. 也许这就是 fclose 失败的原因:

*** Error in `/home/raid/Documents/Temp/TemperatureMonitoringC/Debug/TemperatureMonitoringC': free(): invalid next size (normal): 0x00007ffff0000950 ***

*** Error in `/home/raid/Documents/Temp/TemperatureMonitoringC/Debug/TemperatureMonitoringC': free(): invalid next size (normal): 0x00007ffff0003540 ***

我很确定我不是第一个搞砸的人。任何人都可以帮忙吗?我在 Google 上找不到足够清晰的参考资料。

两个线程的调试器屏幕截图:

调试器窗口:线程 1

调试器窗口:线程 2

4

1 回答 1

0

我回来了一个可能的原因:

我有线程,我在其中独立地分配内存,然后释放它。我在这里读到free 应该与 malloc 调用的顺序完全相反。

由于线程基本上是异步的,并且没有办法真正执行 malloc-free 调用顺序。

当然,我想知道线程是否需要 malloc-free 调用顺序。

有人至少可以确认我的想法是否正确吗?

于 2014-02-13T15:00:39.090 回答