【问题标题】:How to fix "Exception thrown: read access violation. **Surface** was nullptr. occurred" in SDL2 C++如何在 SDL2 C++ 中修复“抛出异常:读取访问冲突。**Surface** was nullptr.发生”
【发布时间】:2021-08-01 10:39:31
【问题描述】:

我正在尝试用 C++ 学习 SDL2,

每次我尝试填充表面时都会收到此错误,在互联网上搜索解决方案但尚未找到:

SDL_Surface* Surface = NULL;
SDL_FillRect(Surface, NULL, SDL_MapRGB(Surface->format, 0, 255, 0));

每次我运行它时,它都不会显示错误,但会破坏代码并显示一个 X 和一个带有文本“异常抛出:读取访问冲突。Surface was nullptr”的小框。在 FillRect 线附近。我可以单击“复制详细信息”,然后复制“抛出异常:读取访问冲突。 ** 表面 ** 为 nullptr。发生”

【问题讨论】:

  • 该错误消息中有什么不清楚的地方? Surface 显然是 nullptr
  • 正如您通常不能int *foo = NULL; foo[0] = 0; 一样,您不能访问尚未创建的表面。你打算用它做什么?手动创建表面,例如SDL_CreateRGBSurface 可以,但那又如何呢?您可能应该编辑问题以包含具有预期用途的代码片段,例如将图像放在屏幕上(但什么是屏幕?为什么不填充屏幕本身)?

标签: c++ visual-studio sdl-2


【解决方案1】:

你需要使用类似的东西

SDL_CreateRGBSurface

代替NULL。因为你不能写入内存中不存在的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2016-08-25
    • 2020-09-12
    • 2023-04-02
    • 2018-05-19
    • 2020-04-15
    • 2019-09-09
    相关资源
    最近更新 更多