两个线程重叠FILE *地址范围(?)

时间:2014-02-08 14:25:27

标签: c pthreads overlap file-pointer

我有一个奇怪的问题,直到现在我还没有经历过。

我创建了两个线程,每个线程基本上打开一个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 ***

我很确定我不是第一个搞砸了它的人。有人可以帮忙吗?我在谷歌上找不到足够明确的引用。

两个线程的调试器截图:

Debugger Window: Thread 1

Debugger Window: Thread 2

1 个答案:

答案 0 :(得分:0)

我回来的可能原因是:

我有线程,我独立地摩托着记忆,然后释放它。我读here,free应该与malloc调用的顺序完全相反。

由于线程基本上是异步的,并且无法真正强制执行无malloc的调用顺序。

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

有人至少可以确认我是否正确思考?