【问题标题】:Process finished with exit code -1073740940 (0xC0000374) [CLion + SDL2]进程以退出代码 -1073740940 (0xC0000374) [CLion + SDL2] 结束
【发布时间】: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 表示堆损坏。

标签: c++ mingw clion


【解决方案1】:

SDL_FreeSurface(keys[i]); // 此行将 keys[i] 设置为 nullptr 键[i] = nullptr; // 你正在访问这一行中已经存在的 nullptr

注释掉键[i] = nullptr;那么你的代码就可以工作了。

【讨论】:

  • 如果keys[i] 只是一个指针,将其多次设置为nullptr 不会导致任何类型的问题。
  • 你的意思是这是有效的?键[i] = nullptr;然后键[i] = nullptr;?访问 nullptr 然后将其设置为 nullptr 是否有效?
猜你喜欢
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2017-11-03
  • 2017-01-19
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多