当我运行该程序时,我在第 5 行遇到段错误,即获取窗口表面的 SDL_Surface 指针。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include "SDL2/SDL.h"
SDL_Window* window=NULL;
SDL_Surface* MainSurface=NULL;
SDL_Surface* ImageSurface=NULL;
void ifdebug(int pmbool,const char* str){
if(pmbool==1){
printf(str);
}
}
void NewWindow(int x,int y,int pmbool){
ifdebug(pmbool,"DEBUG^");
SDL_Init(SDL_INIT_VIDEO);
SDL_Event MainEvent;
int IsRunning=1;
window=SDL_CreateWindow("SDL2: Window",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,x,y,SDL_WINDOW_SHOWN);
if(window==NULL){
ifdebug(pmbool,"WINDOW:ERROR<<");
ifdebug(pmbool,SDL_GetError());
ifdebug(pmbool,">>#\n");
SDL_FreeSurface(ImageSurface);
ImageSurface=NULL;
SDL_DestroyWindow(window);
window=NULL;
SDL_Quit();
}
else{
ifdebug(pmbool,"WINDOW:SUCCESS^");
}
MainSurface=SDL_GetWindowSurface(window);
while(IsRunning){
if(SDL_PollEvent(&MainEvent)!=0){
if(MainEvent.type==SDL_QUIT){
ifdebug(pmbool,"QUIT#\n");
IsRunning=0;
SDL_FreeSurface(ImageSurface);
ImageSurface=NULL;
SDL_DestroyWindow(window);
window=NULL;
SDL_Quit();
}
}
}
}
void LoadImage(int pmbool,char* filename){
ImageSurface=SDL_LoadBMP(filename);
if(ImageSurface==NULL||filename==NULL){
ifdebug(pmbool,"DEBUG^");
ifdebug(pmbool,"LOADBMP:ERROR<<");
ifdebug(pmbool,SDL_GetError());
ifdebug(pmbool,">>#\n");
SDL_FreeSurface(ImageSurface);
ImageSurface=NULL;
SDL_DestroyWindow(window);
window=NULL;
SDL_Quit();
}
}
int main(int argc,char* args[]){
NewWindow(600,400,1);
LoadImage(1,"/home/vlad/Desktop/C-lang/BLU.bmp");
SDL_BlitSurface(ImageSurface,NULL,MainSurface,NULL);
SDL_UpdateWindowSurface(window);
return 0;
}
这是错误:
Line 5: 9029 (Core Dumped)
和 window 有关系吗?
最佳答案
OP 修复了它。原来是关闭窗口的函数阻止了它的加载。这是固定代码:
#include <stdio.h>
#include <stdlib.h>
#include "SDL2/SDL.h"
SDL_Window* window=NULL;
SDL_Surface* MainSurface=NULL;
SDL_Surface* ImageSurface=NULL;
SDL_Event MainEvent;
void ifdebug(int pmbool,const char* str){
if(pmbool==1){
printf(str);
}
}
void InitWindow(int x,int y,int pmbool){
ifdebug(pmbool,"DEBUG^");
SDL_Init(SDL_INIT_VIDEO);
window=SDL_CreateWindow("SDL2: Window",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,x,y,SDL_WINDOW_SHOWN);
if(window==NULL){
ifdebug(pmbool,"WINDOW:ERROR<<");
ifdebug(pmbool,SDL_GetError());
ifdebug(pmbool,">>#\n");
SDL_DestroyWindow(window);
window=NULL;
SDL_Quit();
}
else{
ifdebug(pmbool,"WINDOW:SUCCESS^");
}
}
void LoadImage(int pmbool,char* filename){
MainSurface=SDL_GetWindowSurface(window);
ImageSurface=SDL_LoadBMP(filename);
if(ImageSurface==NULL){
ifdebug(pmbool,"WINDOW:ERROR<<");
ifdebug(pmbool,SDL_GetError());
ifdebug(pmbool,">>#\n");
SDL_DestroyWindow(window);
window=NULL;
SDL_Quit();
}
SDL_BlitSurface(ImageSurface,NULL,MainSurface,NULL);
SDL_UpdateWindowSurface(window);
}
void InputGet(int pmbool){
int IsRunning=1;
while(IsRunning){
if(SDL_PollEvent(&MainEvent)!=0){
if(MainEvent.type==SDL_QUIT){
ifdebug(pmbool,"QUIT#\n");
IsRunning=0;
SDL_DestroyWindow(window);
window=NULL;
SDL_FreeSurface(ImageSurface);
SDL_Quit();
}
}
}
}
int main(int argc,char* args[]){
InitWindow(600,400,1);
LoadImage(1,"/home/vlad/Desktop/C-lang/BLU.bmp");
InputGet(1);
SDL_UpdateWindowSurface(window);
return 0;
}
关于c++ - SDL2 : I Receive Segmentation Fault on Line 5, SDL_表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102757/