c++函数在第二次调用后崩溃
C++ function crashes after second call
我正在使用c++ SDL2库创建一个游戏。我的游戏在屏幕顶部有一个状态栏,应该在每次移动后更新。但是,更新只能工作一次。再次更新会导致程序崩溃。
我做了一些测试,发现当使用SDL_CreateTextureFromSurface()
将表面转换为纹理时,程序崩溃了
这是我使用的函数。
//screen* is a pointer to an object that contains all screen information
// such as dimensions, the renderer, the surface and the window object
void status_bar::update(int B, const char* E, screen* display){
if(B == 0){ //color is declared in status_bar object
color.r = 0;
color.g = 255;
color.b = 0;
}else{
color.r = 255;
color.g = 255;
color.b = 255;
}
SDL_Surface* temp_surf = TTF_RenderText_Solid(font, std::to_string(long double(B)).c_str(), color);
balanceRECT = temp_surf->clip_rect;
if(!balanceTEXT){
SDL_DestroyTexture(balanceTEXT);
}
balanceTEXT = SDL_CreateTextureFromSurface(display->Renderer, temp_surf); //Here the program crashes
balanceRECT.x = B_Mid_Coord.x - (balanceRECT.w / 2);
balanceRECT.y = B_Mid_Coord.y - (balanceRECT.h / 2);
SDL_FreeSurface(temp_surf);
temp_surf = TTF_RenderText_Solid(font, E, white);
energyRECT = temp_surf->clip_rect;
if(!energyTEXT){
SDL_DestroyTexture(energyTEXT);
}
energyTEXT = SDL_CreateTextureFromSurface(display->Renderer, temp_surf);
energyRECT.x = E_Mid_Coord.x - (energyRECT.w / 2);
energyRECT.y = E_Mid_Coord.y - (energyRECT.h / 2);
SDL_FreeSurface(temp_surf);
}
我已经初始化了所有SDL库,所以这应该不是问题。渲染器不会在更新之间消失。临时表面在每次更新时都声明和定义,因此也应该没问题。
为什么这个函数会导致我的游戏崩溃?
我认为它可以是NULL指针的东西。也许在调用SDL_CreateTextureFromSurface之前检查显示对象指针
你确定崩溃不是在上一行吗?
if(!balanceTEXT){
SDL_DestroyTexture(balanceTEXT);
}
似乎你正在试图破坏一个NULL
指针
我找到我的问题了。第一次调用update函数是在类的构造函数中。这个构造函数接受一个screen*
对象作为参数。我称这个参数为display
。但是,类本身也有一个screen*
变量display
。所以第一次使用的是参数display
,它确实有一个值,但是第二次使用的是类变量display
,我忘记定义了。我将参数改为DP
,并将display = DP
添加到构造函数中。
相关文章:
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 调用 free() 有时会导致程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- 使用 MS 绕道挂钩在调用钩子函数时崩溃C++
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 亲.InsertAtHead() 调用创建程序崩溃
- 重写require后调用"lua_getfield()"时崩溃
- 当从成员类调用封装的std::begin时,程序崩溃
- Shaderc在android上调用glsl到spv程序集时崩溃
- 从 C# 模块调用C++函数引发随机崩溃
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- EGL 在第一次 opengl 函数调用时崩溃
- 如果调用 RtlSetProcessIsCritical,将使用 lstrcmpW 将命令行与值进行比较将使程序崩溃
- C++如果调用 vector,矢量分割错误会导致崩溃
- 由于调用 std::condition_variable 后参数无效而导致应用程序崩溃
- Windows 10特定的崩溃调用leaveccriticalsection