gpt4 book ai didi

c++ - 调用 SDL_RenderCopy 时出现异常

转载 作者:行者123 更新时间:2023-11-28 05:35:41 45 4
gpt4 key购买 nike

我是 C++ 的新手,我正在使用 SDL 2.0 学习它。尝试使用我的 Sprite 类绘制 Sprite 时遇到以下错误:

在 SDDDDL2.exe 中的 0x000000006C793659 (SDL2.dll) 处抛出异常:0xC0000005:访问冲突读取位置 0xFFFFFFFFFFFFFFFF。

以下代码是我的 Sprite 类中相关代码的精简版本:

public:
SDL_Texture *image = NULL;
SDL_Rect rect;

void SetTexture(SDL_Texture *texture)
{
image = texture;
rect.x = 100; rect.y = 100; rect.w = 64; rect.h = 64;
}

void DrawSprite(SDL_Renderer *renderer)
{
SDL_RenderCopy(renderer,image,NULL,&rect); //Calling this causes the
//error
}

以及我的主游戏类“Game.cpp”中的关键代码

Sprite *testSprite = NULL;
SDL_Texture *testTex = NULL;

void LoadContent()
{
SDL_Surface *bmpSurface = SDL_LoadBMP("sprite.bmp");
testTex = SDL_CreateTextureFromSurface(renderer, bmpSurface);
testSprite = &Sprite(Vector2(100,100),Vector2(50,50)); // Just the
//constuctor, this is not affecting the issue
testSprite->SetTexture(testTex);
SDL_FreeSurface(bmpSurface);
}

void Draw ()
{
testSprite->DrawSprite(renderer); // Get the error when calling this
}

我通过测试知道确实是传递到 SDL_RenderCopy 函数 (image) 的纹理导致了这个问题,因为如果我在 Game.cpp 文件中调用该函数就不会发生这种情况使用“testTex”图像。

我还知道 SDL_RenderCopy 函数中使用的纹理不是NULL,因为我在调用 SDL_RenderCopy 之前使用了空值检查,而且它还是调用了。

最佳答案

我认为问题在于这一行:testSprite = &Sprite(Vector2(100,100), Vector2(50,50));

一旦LoadContent()返回,testSprite分配的地址值就无效了。

将其替换为例如testSprite = new Sprite(Vector2(100,100),Vector2(50,50)); 并重新运行。

关于c++ - 调用 SDL_RenderCopy 时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38347361/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com