gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:39:59 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com