【发布时间】:2020-03-21 14:05:10
【问题描述】:
当我试图关闭程序时,我想像往常一样通过 for 循环删除动态 SDL_surface 数组,但程序以退出代码 -1073740940 结束。当我评论这个循环时,程序以 0 退出代码关闭。所以有什么问题?下面是代码:
void close(SDL_Window* window, SDL_Surface* surface, SDL_Surface* keys[]) {
//free memory
for( int i = 0; i < KEY_PRESS_SURFACE_TOTAL; ++i )
{
//KEY_PRESS_SURFACE_TOTAL is defined in enum
SDL_FreeSurface(keys[i]);
keys[i] = nullptr;
}
SDL_FreeSurface(surface);
surface = nullptr;
SDL_DestroyWindow(window);
window = nullptr;
SDL_Quit();
我是初学者,所以我只是想学习 SDL2 基础知识。
更新: 这是枚举部分代码:
enum KeyPressSurfaces {
KEY_PRESS_SURFACE_DEFAULT,
KEY_PRESS_SURFACE_UP,
KEY_PRESS_SURFACE_DOWN,
KEY_PRESS_SURFACE_LEFT,
KEY_PRESS_SURFACE_RIGHT,
KEY_PRESS_SURFACE_TOTAL };
还有在代码中使用这个数组:
bool loadMedia(SDL_Surface* keys[]) {
bool success = true;
keys[KEY_PRESS_SURFACE_DEFAULT] = loadSurface("images/press.bmp");
if( keys[KEY_PRESS_SURFACE_DEFAULT] == NULL ) {
std::cout << "Failed to load default image!\n";
success = false;
} //and so on...
return success; }
在主要部分...
SDL_Surface* gKeyPressSurfaces[KEY_PRESS_SURFACE_TOTAL] = { };
//creating window, surface etc.
if ( !loadMedia(gKeyPressSurfaces) )
std::cout << "Failed to load media!\n";
else {
bool quit = false;
SDL_Event event;
gCurrentSurface = gKeyPressSurfaces[KEY_PRESS_SURFACE_DEFAULT];
while ( !quit )
{
while (SDL_PollEvent(&event) != 0)
{
if ( event.type == SDL_KEYDOWN ) {
switch (event.key.keysym.sym) {
case SDLK_UP:
gCurrentSurface = gKeyPressSurfaces[KEY_PRESS_SURFACE_UP];
break; // and so on...
我是按照 LazyFoo 的 SDL2 教程做的,所以我不明白为什么这不起作用。
【问题讨论】:
-
@drescherjm 是的,正是 MinGW
-
我相信
0xC0000374表示堆损坏。