You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL窗口创建后即刻关闭,Visual Studio调试控制台仍开启

SDL窗口刚打开就立即关闭的修复方案

问题根源

你的代码存在两个关键问题:

  1. 缺少错误检查:SDL初始化、窗口/渲染器创建的操作都可能失败,但你没有验证返回结果。如果某一步失败,后续渲染逻辑不会执行,程序会直接进入延迟阶段后退出,表现为窗口刚打开就关闭。
  2. 使用SDL_Delay而非事件循环:SDL_Delay只是让程序暂停固定时长,时间到后程序直接结束,无法响应用户的窗口关闭操作。

修复方案

1. 添加完整的错误检查

在每一步SDL资源创建后检查返回值,失败时输出错误信息并正确清理资源:

2. 用事件循环替代SDL_Delay

事件循环可以监听系统事件(比如用户点击关闭按钮),让窗口保持开启直到用户主动操作。

修改后的完整代码:

#include <iostream>
#include "SDL.h"
#include "SDL_image.h"
#include <cstdio>

using namespace std;

int main(int argc, char* argv[])
{
    // 初始化SDL并检查结果
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
        cout << "SDL初始化失败: " << SDL_GetError() << endl;
        return 1;
    }

    // 创建窗口并检查结果
    SDL_Window* window = SDL_CreateWindow("SDLwindow", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
    if (!window) {
        cout << "窗口创建失败: " << SDL_GetError() << endl;
        SDL_Quit();
        return 1;
    }

    // 创建渲染器并检查结果
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);
    if (!renderer) {
        cout << "渲染器创建失败: " << SDL_GetError() << endl;
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
    }

    // 设置渲染颜色并清空窗口
    SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);

    // 事件循环:保持窗口开启直到用户关闭
    bool running = true;
    SDL_Event event;
    while (running) {
        // 处理所有待处理事件
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                running = false;
            }
        }
        // 刷新渲染内容(如果有动态绘制逻辑,这里可以添加)
        SDL_RenderPresent(renderer);
    }

    // 清理资源
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
   
    return 0;
}

额外说明

  • 错误检查能帮你快速定位问题,比如SDL库未正确链接、缺少运行时依赖(如SDL_image的动态库)等。
  • 事件循环是SDL程序的标准结构,所有需要持续运行的窗口程序都应该使用这种方式,而不是依赖延迟函数。

内容的提问来源于stack exchange,提问作者Jsem Ptak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 16:55:59