gpt4 book ai didi

android - 由于多线程中的 free() 调用导致程序随机崩溃

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:13:06 25 4
gpt4 key购买 nike

我有一段代码,里面有类似的东西:

int *mem_ptr;
.
.
if(mem_ptr)
{
free(mem_ptr);
}
.
.

应用程序是多线程的。有时,一个线程通过了 if 检查,然后在 free() 上下文切换发生之前,另一个线程也通过了 if 检查,也执行 free()。现在,当控件返回到第一个线程时,它会在 free() 处崩溃并给出错误 Abort message: 'invalid address or address of corrupt block 0x40735cb0 passed to dlfree'

除了mutex,有没有更好的办法来处理这种情况

PS:我正在使用 C++ 开发 Android native 绑定(bind)程序,这段代码在 onTransact() 调用中。

最佳答案

如果两个或多个线程试图释放/删除相同的内存,那么代码和设计都会被破坏。虽然线程同步原语会有所帮助,但我也不会使用它们。应该只有一个线程释放内存。理想情况下,它应该是分配内存的人。如果不同,如跨线程消息传递的情况,仍然只有一个目标线程应该删除内存。

这就像说一个线程打开一个文件,任何线程都会关闭它。看起来不太好。文件的关闭应该由单线程完成,而不是由争用的多个线程完成。

关于android - 由于多线程中的 free() 调用导致程序随机崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37694647/

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