C 两个线程获得重叠的文件*地址范围

C 两个线程获得重叠的文件*地址范围,c,pthreads,overlap,file-pointer,C,Pthreads,Overlap,File Pointer,我有一个奇怪的问题,到目前为止我还没有经历过 我创建了两个线程,每个线程基本上打开一个文件*将一些数据写入磁盘。 现在,编写部分本身并没有引起运行时问题,尽管输出似乎已损坏,但当我关闭这两个单独线程中的两个不同文件*时,所有的麻烦都烟消云散了 我看到一个线程的_IO_buf_base指向0x7ffff66d3000,而另一个线程的_IO_write_end指向0x7ffff66d3000。也许这就是fclose认为的原因: *** Error in `/home/raid/Documents/T

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

我创建了两个线程,每个线程基本上打开一个文件*将一些数据写入磁盘。 现在,编写部分本身并没有引起运行时问题,尽管输出似乎已损坏,但当我关闭这两个单独线程中的两个不同文件*时,所有的麻烦都烟消云散了

我看到一个线程的_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 ***
我很确定我不是第一个把事情搞砸的人。有人能帮忙吗?我在谷歌上找不到足够清晰的引用

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


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

我有一些线程,在这些线程中,我独立地删除内存,然后释放它。我读到免费电话的顺序应该和malloc电话完全相反

因为线程基本上是异步的,并且没有办法真正强制执行malloc-free调用顺序

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


至少有人能证实我的想法是否正确吗

文件*变量是如何声明和初始化的?相关代码似乎是理解正在发生的事情所必需的。您显示的错误消息表明内存管理已损坏。尝试使用Valgrind这样的内存检查器运行该程序:非常感谢您的评论。我确实通过valgrind运行了应用程序,它向我显示了内存损坏,尽管其原因非常隐晦。我发现,真正的原因至少似乎是线程没有正确同步,现在我修复了它,错误似乎消失了。然而,就我的一生而言,我仍然无法理解为什么在关闭文件*时代码会抛出。FILE*变量是函数范围的、非静态的,因此,我没有想到会出现任何问题。当内存损坏发生时,代码很可能也会出现未定义的行为,因此或多或少会发生任何事情。很高兴您现在了解了Valgrind,在即将到来的调试会话中,它将是您可靠的伙伴-谢谢@alk。希望随着经验的积累,情况会变得更好。