我遇到了一个奇怪的问题,到目前为止我还没有遇到过。
我创建了两个线程,每个线程基本上打开一个FILE*
来将一些数据写入磁盘。
现在,写入部分本身不会导致运行时问题(尽管输出似乎已损坏),但是当我关闭这些中的两个不同的 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 上找不到足够清晰的引用。
两个线程的调试器屏幕截图:
最佳答案
我带着一个可能的原因回来了:
我有一些线程,在其中独立地分配内存然后释放它。我读过here free 的顺序应该与 malloc 调用的顺序完全相反。
由于线程基本上是异步的,因此无法真正强制执行无 malloc 调用顺序。
当然,我想知道跨线程是否需要无 malloc 调用顺序。
有人至少可以确认我的想法是否正确吗?
关于c - 两个线程获得重叠的 FILE* 地址范围(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647194/