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

SDL2初始化绿色窗口时出现access violation访问违例错误如何解决

问题根因定位
  • 核心错误是函数调用误用:你需要设置渲染器的绘制颜色,却调用了用来读取绘制颜色的SDL_GetRenderDrawColor函数。该函数的后四个参数均为输出参数,要求传入uint8_t类型变量的内存地址,用来存储读取到的RGBA色值。
  • 你直接将数值255强制转换为uint8_t*指针传入,相当于要求SDL往内存地址0xFF的位置写入数据,和报错提示的「Access violation writing location 0x00000000000000FF」完全吻合,直接触发访问违例。
修复方案

将错误的函数调用替换为SDL_SetRenderDrawColor即可,该函数用来设置渲染器绘制颜色,后四个参数为输入参数,直接传入色值不需要转指针。

修正后的完整代码
#include "SDL.h"
#undef main

int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Window* window = SDL_CreateWindow("title", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 600, 400, SDL_WINDOW_SHOWN);
    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);

    // 替换为设置绘制颜色的正确API,直接传入RGBA色值
    SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);

    SDL_RenderClear(renderer);
    SDL_RenderPresent(renderer);
    SDL_Delay(3000);

    // 新增资源释放逻辑,避免内存泄漏
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}
额外开发建议
  • 后续开发可以增加SDL API调用的返回值校验,比如SDL_CreateWindow、SDL_CreateRenderer调用后判断返回值是否为NULL,失败时可通过SDL_GetError()获取具体错误信息,大幅降低排查成本。
  • 所有SDL创建的资源(窗口、渲染器、纹理等)都要在使用完毕后主动调用对应销毁接口释放,最后调用SDL_Quit()退出SDL,符合资源管理规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:15:02