SDL_LoadBMP периодически прерывается - PullRequest
0 голосов
/ 15 марта 2011

Я вызываю SDL_LoadBMP ("duck.bmp") в цикле десять тысяч раз.

Примерно в тысячный раз сбой вызова, и SDL_GetError () сообщает:

"Не удалось открыть duck.bmp"

Я не могу понять, почему это - я могу что-нибудь сделать, чтобы получить больше информации?

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

Примечание: BMP - 32x32.

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Даже если у вас достаточно свободного системного ОЗУ, все равно может не хватить адресного пространства; вы обычно получаете только 2 ГБ для работы в 32-битном приложении. Хотя с таким крошечным изображением должно потребоваться более 1000 раз, чтобы использовать столько памяти. Делаете ли вы что-нибудь еще в своем цикле, жаждущем памяти?

Самое главное, есть ли причина, по которой вы хотите повторно загрузить файл изображения 10 000 раз? Если вы ищете несколько копий изображения для манипуляции, я бы рекомендовал делать копии исходной поверхности с SDL_ConvertSurface вместо того, чтобы каждый раз возвращаться к файлу. Если и этот метод не работает, возможно, что SDL_GetError выдаст вам более значимое сообщение об ошибке, когда это произойдет.

Если вы также записываете данные обратно в этот файл, убедитесь, что вы правильно его закрываете, иначе у вас могут возникнуть проблемы с разрешениями. Я уверен, что Windows не позволит вам открыть файл для чтения, который уже открыт для записи. (Это кажется менее вероятным, поскольку вы сталкиваетесь с проблемой только после тысячи итераций цикла, но это стоит проверить.)

1 голос
/ 01 сентября 2014

Когда вы закончите с изображением, вы должны вызвать SDL_FreeSurface (см. http://wiki.libsdl.org/SDL_FreeSurface). В противном случае, ну, память не освобождается.

Как указывает Raptor007, загрузка изображения 1000 раз, хм, не рекомендуется. Я предположил, что вы делаете это, чтобы увидеть, была ли утечка памяти. Если нет ... прекрати это делать. Достаточно одного раза.

...