SDL2 Segfault in SDL_FillRect
SDL2 Segfault in SDL_FillRect
终端输出:
> ./a.out
bla1
Speicherzugriffsfehler
Speicherzugriffsfhler在德语中的意思基本上是分段错误。
当我使用全局变量,或者将函数中的代码复制粘贴到main中时,它只是起作用。我不知道它为什么坏了。
使用:g++sdl.cpp-lSDL2 在Linux Mint 16上编译
源代码:
#include <iostream>
#include <SDL2/SDL.h>
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
using namespace std;
bool init_SDL(SDL_Window *window, SDL_Surface *windowSurface);
void close_SDL(SDL_Window *window, SDL_Surface *image);
int main(int argc, char *argv[])
{
SDL_Window *window = NULL;
SDL_Surface *windowSurface = NULL;
SDL_Surface *image = NULL;
if(!init_SDL(window, windowSurface)){
cout << "Failed to initialize SDL" << endl;
}
else{
cout << "bla1" << endl;
SDL_FillRect(windowSurface, NULL, SDL_MapRGB(windowSurface->format, 0xFF, 0xFF, 0xFF));
cout << "bla2" << endl;
SDL_UpdateWindowSurface(window);
cout << "bla3" << endl;
SDL_Delay(2000);
}
close_SDL(window, image);
EXIT_SUCCESS;
}
bool init_SDL(SDL_Window *window, SDL_Surface *windowSurface){
bool success = true;
if(SDL_Init(SDL_INIT_VIDEO) < 0){
cout << "SDL failed to initialize! SDL_Error: " << SDL_GetError() << endl;
success = false;
}
else{
window = SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
if(window == NULL){
cout << "Failed to create window! SDL_Error: " << SDL_GetError() << endl;
success = false;
}
else{
windowSurface = SDL_GetWindowSurface(window);
}
}
return success;
}
void close_SDL(SDL_Window *window, SDL_Surface *image){
SDL_FreeSurface(image);
SDL_DestroyWindow(window);
SDL_Quit();
return;
}
我在reddit上得到了解决方案。这解决了问题:
bool init_SDL(SDL_Window *&window, SDL_Surface *&windowSurface)
我需要通过引用传递指针,因为指针本身在函数中被操纵。否则,它们仍将指向main中的null。
相关文章:
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- SDL 窗口不会弹出
- SDL 操纵杆按钮按下/C++
- VSCode IntelliSense无法识别SDL框架的SDL_image扩展库
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- SDL 映像:无法打开映像,仅显示错误消息
- 如何在 3D OpenGL 场景上绘制 SDL 2D 矩形?
- "Undefined symbols for architecture x86_64" 在 SDL 2 (macOS) 中
- 为什么 SDL 在 Mac 上比 Linux 慢得多?
- 在 OSX 上打开 SDL 窗口时不要打开终端窗口
- SDL + OpenGL ES 2.0 使用着色器显示纹理
- SDL GPU 为什么将两个图像分成两个单独的循环更快?
- 在 cmake 中找不到 SDL 库
- SDL/C++: 如何平滑但随机地移动矩形?
- 如何与 SDL 库链接?
- 为什么我的C++代码不呈现 SDL 矩形?
- 为什么要在初始化SDL之前在SDL中声明指针
- C++/SDL 如何覆盖数组?
- 在 SDL 中水平减小静态图像进度条