【发布时间】:2021-10-18 13:01:09
【问题描述】:
我们刚刚开始学习如何使用 SDL2,在学习教程时遇到了这个访问冲突错误。我们正在尝试初始化一个绿色窗口。我们熟悉 C 和 C#,但我们对 C++ 的经验并不多。
在搞砸的同时,我们确定最后四行之一似乎包含问题。我们希望有人能提供帮助。
在 PWS.exe 中的 0x00007FF801C69BB9 (SDL2.dll) 处引发异常:0xC0000005:访问冲突写入位置 0x00000000000000FF。
#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);
SDL_GetRenderDrawColor(renderer, 0, (uint8_t*)255, 0, (uint8_t*)255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
SDL_Delay(3000);
return 0;
}
【问题讨论】:
-
不确定这是否是您崩溃的原因,但您没有按照 SDL 期望的方式处理
main:wiki.libsdl.org/SDL_SetMainReady -
请注意,许多 SDL 调用可能会失败,但您不会检查这些失败案例。有关示例,请参阅
SDL_GetError的文档。 -
这是
#undef main的一些 SDL 魔法吗?看起来很吓人…… -
@TedLyngmo SDL 执行
#define main以便它可以预订一些围绕它的东西,但#undef'ing 这不是规避它的正确方法(有关更多信息,请参阅我评论中的链接)。