В настоящее время я тестирую класс TextureManager, который я буду использовать в своем игровом проекте, но проблема в том, что .exe сработает, когда я пытаюсь загрузить 2d-текстуры в std :: map , Что мне нужно, что у меня есть карта указателей на SDL_Textures, заклиненную со стандартной строкойСбой программы во время отображения текстуры
std::map<std::string, SDL_Texture*>Textures;
СВД и SDL_image инициализирует нормально (успех printfs в консоли), но затем начинается отображение текстуры и аварийное завершение работы программы, как только вызывается функция load(). Ниже реализации функции
void TextureManager::load(std::string path, std::string id)
{
SDL_Surface* TempSurface = IMG_Load(path.c_str());
if(TempSurface == NULL)
{
printf("Failed to load %s: error: %s\n", path.c_str(), IMG_GetError());
}
/* add color coding if necessary here
SDL_SetColorKey(TempSurface, SDL_TRUE, SDL_MapRGB(TempSurface->format, 0, 0xFF, 0xFF));
*/
SDL_Texture* newTexture = SDL_CreateTextureFromSurface(renderer, TempSurface);
if(newTexture == NULL)
{
printf("Failed to create a texture %s: error: %s\n", id.c_str(), SDL_GetError());
}
SDL_FreeSurface(TempSurface);
Textures[ id ] = newTexture;
printf("Texture %s mapped successfully", id.c_str());
//possible error - not the cause of the described error
//SDL_DestroyTexture(newTexture);
}
Естественно, текстуры Карта является частным членом класса TextureManager. Не имеет значения, вызвана ли функция конструктором TextureManager или позже указателем на TextureManager - тем же результатом. В предыдущей версии этого загрузчика не отображались текстуры, карта вообще не использовалась, и она работала нормально. Виновата ли карта? Это единственная разница между версиями ...
Редактировать: Я добавил дополнительный комментарий к последней строке кода и «прокомментировал» ее, так как после того, как я протестировал предложения, это причина ошибки, поведение программы не изменилось, поэтому это должно быть что-то еще.
EDIT2: ОК, я решил проблему - случилось, что одна из поверхностей была загружена из файла .jpg, и по какой-либо причине файл библиотеки jpg sdl был поврежден. Поэтому поддержка JPG не была инициализирована во время выполнения, и попытка загрузить файл jpg привела к сбою exe. Замена .dll в папке проекта решила проблему - все работает, как ожидается, в настоящее время
Где он падает? Потому что, если вы уничтожаете текстуру после ее загрузки, то ссылайтесь на текстуру, что, очевидно, приведет к неожиданным результатам. –
_ @ Quit_ какие аномалии вы наблюдали при использовании отладчика для выполнения вашего программного кода? –