Многопоточная ошибка SDL в C ++ - PullRequest
0 голосов
/ 12 мая 2010

Я создаю программу на C ++, используя SDL, и иногда получаю эту ошибку:

* обнаружен glibc * ./assistant: двойное освобождение или повреждение (! Prev)

Сложно копировать, поэтому я не могу точно определить, что его вызывает, но я просто добавил второй поток в программу, и ни один из потоков, выполняющихся сам по себе, не вызывает ошибку.

Потоки не имеют общих переменных, хотя обе они выполняют функции SDL_BlitSurface и SDL_Flip. Может ли запуск этих программ одновременно вызвать такую ​​ошибку или я лаю не на том дереве?

Если это причина, я должен просто включить мьютекс вокруг всех вызовов SDL?

Ответы [ 2 ]

1 голос
/ 12 мая 2010

вы работаете с установленной переменной окружения MALLOC_CHECK_?Это включает проверку памяти в glibc, и раньше у меня были проблемы с ним из-за состояния гонки в коде проверки памяти glibc (http://sourceware.org/bugzilla/show_bug.cgi?id=10282), из-за которого он выдавал подобные сообщения с явным отрывом. Попробуйте запустить под valgrind ипосмотрите, видит ли это какие-либо проблемы.

0 голосов
/ 13 мая 2010

Оказывается, это было вызвано тем, что потоки не завершаются правильно. Вместо того, чтобы завершить их с main, я позволил им вернуться, когда они увидели, что main закончила работу (через глобальную переменную running), и проблема исчезла.

...