【发布时间】:2010-05-12 08:51:28
【问题描述】:
我正在使用 SDL 用 C++ 构建程序,但偶尔会收到此错误:
* 检测到 glibc * ./assistant: double free or corruption (!prev)
很难复制,所以我找不到确切的原因,但我只是在程序中添加了第二个线程,似乎没有一个线程自行运行导致错误。
线程不共享任何变量,尽管它们都运行函数SDL_BlitSurface 和SDL_Flip。同时运行这些会引发这样的错误,还是我在找错树?
如果这是原因,我是否应该在所有 SDL 调用周围简单地抛出一个互斥锁?
【问题讨论】:
-
这两个函数都采用
SDL_Surface *参数。您是否将相同的表面传递给每个函数? -
其实,你是对的,我知道。事实上,所有相同的表面:两个线程都调用一个通用的绘图函数。这会导致我提到的错误吗?我不熟悉它,但在浏览答案时似乎暗示当尝试取消分配已经未分配的内存时引发错误。
标签: c++ multithreading sdl