使用 C++/SDL2 加载图像 - "unhandled exception" , "access violation reading location"
Loading images with C++/SDL2 - "unhandled exception", "access violation reading location"
我正在为一个早期版本的SDL研究别人的Pong代码,我试图让它在SDL2上运行。下面是我的代码摘录,它只加载图像。当这段代码运行时,我得到一个弹出的窗口告诉我:在The Pong.exe中的0x00A065AD未处理异常:0xC0000005:访问违反读取位置0x00000004。在调试时,它也指向这一行:
optimizedImage = SDL_ConvertSurface(loadedImage, windowSurface->format, 0);
错误列表显示警告LNK4098: defaultlib 'msvcrt。Lib与其他Lib的使用冲突;使用/NODEFAULTLIB:库。
我不知道该怎么理解这一切。最重要的是,SDL窗口显示,冻结,有时甚至在调试结束后也不会关闭。(当我尝试时,它告诉我有访问冲突)#include <string>
#include <SDL.h>
const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 475;
const int SCREEN_BPP = 2;
SDL_Window *window = NULL;
SDL_Surface *windowSurface = NULL;
SDL_Surface *ball = NULL;
SDL_Surface *background = NULL;
SDL_Surface *paddleL = NULL;
SDL_Surface *paddleR = NULL;
SDL_Event event;
SDL_Surface *loadImage(std::string fileName)
{
SDL_Surface *loadedImage = NULL;
SDL_Surface *optimizedImage = NULL;
loadedImage = SDL_LoadBMP(fileName.c_str());
if (loadedImage != NULL)
{
optimizedImage = SDL_ConvertSurface(loadedImage, windowSurface->format, 0);
SDL_FreeSurface(loadedImage);
if (optimizedImage != NULL)
{
SDL_SetColorKey(optimizedImage, SDL_TRUE,
SDL_MapRGB(optimizedImage->format, 255, 255, 255));
}
}
return optimizedImage;
}
bool init()
{
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
return false;
window = SDL_CreateWindow("Pong", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH,
WINDOW_HEIGHT, SDL_WINDOW_SHOWN);
if (window == NULL)
return false;
return true;
}
bool loadFiles()
{
ball = loadImage("ball.bmp");
background = loadImage("background.bmp");
paddleL = loadImage("paddleRed.bmp");
paddleR = loadImage("paddleBlue.bmp");
if (ball == NULL)
return false;
if (background == NULL)
return false;
if (paddleL == NULL || paddleR == NULL)
return false;
return true;
}
int main(int argc, char* args[])
{
windowSurface = SDL_GetWindowSurface(window);
if (init() == false)
return 1;
if (loadFiles() == false)
return 1;
SDL_FreeSurface(windowSurface);
SDL_FreeSurface(ball);
SDL_FreeSurface(background);
SDL_FreeSurface(paddleL);
SDL_FreeSurface(paddleR);
windowSurface = ball = background = paddleL = paddleR = nullptr;
SDL_DestroyWindow(window);
window = nullptr;
SDL_Quit();
return 0;
}
您正在呼叫
windowSurface = SDL_GetWindowSurface(window);
之前window = SDL_CreateWindow("Pong", SDL_WINDOWPOS_CENTERED,
所以窗口仍然是NULL,导致windowSurface
为NULL,导致windowSurface->format
导致崩溃
相关文章:
- 为重写std::exception的库生成swig接口时出错
- 什么是 std::exception::what() 以及为什么要使用它?
- 链表"exception thrown"
- 为什么程序员同时使用 std::bad_alloc 和 std::exception.是否 std::例外 仅是不够的
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- C++ broken_promise exception
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- QVTKWidget SetRenderWindow() with PCLVisualizer Exception
- 自定义派生的 std::exception 类的 'what' 函数返回神秘的废话
- 使用flag、return、exception、goto或break中止过程
- 过载时出错 << "Exception thrown: read access violation.m.matrix was 0xCDDDCDDE."
- 我收到此错误"Unhandled exception at 0x009437bd in Hash functions.exe: 0xC0000005: Access violation reading
- 捕捉 c++ "Access Violation Writing Exception" ?
- Python 调用 DLL 调用 Python,"WindowsError: exception: access violation reading 0x00000004"
- 使用 C++/SDL2 加载图像 - "unhandled exception" , "access violation reading location"