c - 两个线程获得重叠的 FILE* 地址范围(?)

标签 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 ***

我很确定我不是第一个把事情搞砸的人。有人可以帮忙吗?我在 Google 上找不到足够清晰的引用。

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

Debugger Window: Thread 1

Debugger Window: Thread 2

最佳答案

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

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

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

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

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

关于c - 两个线程获得重叠的 FILE* 地址范围(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21647194/

相关文章:

html - 如何避免 html 元素相互重叠?

javascript - 在 d3 wordcloud 中重叠

algorithm - 量化二分图中的成对、三重等重叠

Cygwin 和 WinPcap 4.1.3 时间戳 - 微秒问题 - header->ts.tv_usec 不正确 - C 程序

c - 如何使用 atoi() 获得负值?

multithreading - pthread_once() 是如何在内部实现的?

c - 为什么我的程序占用如此多的 CPU 时间,尽管大部分时间都处于 sleep 状态?

c - 通过多个 IP 摄像机捕获视频数据包

c++ - Linux c/c++ 如何从 ThreadID 中查找 PID

c - float* 类型的变量应该指向单个 float 还是一系列 float ?