创建窗口时发生SDL错误? #包括 #包括 #包括 bool init(字符*标题、整数宽度、整数高度); 无效关闭(); SDL_Window*Window=NULL; SDL_表面*屏幕=空; bool init(字符*标题、整型宽度、整型高度){ 布尔成功=真; //SDL_在成功时初始化0,在失败时返回负值 if(SDL_Init(SDL_Init_EVERYTHING)!=0){ SDL_日志(“无法初始化SDL:%s”,SDL_GetError()); 成功=错误; } //创建窗口和曲面 window=SDL_CreateWindow(显示标题、SDL_WINDOWPOS_未定义、SDL_WINDOWPOS_未定义、宽度、高度、SDL_window_); //SDL_CreateWindow在创建时返回窗口,在失败时返回NULL 如果(!窗口){ SDL_日志(“无法创建窗口:%s”,SDL_GetError()); 成功=错误; }否则{ //获取窗口表面 屏幕=SDL_GetWindowSurface(窗口); 如果(屏幕==NULL){ SDL_日志(“无法获取窗口表面:%s”,SDL_GetError()); 成功=错误; } } 回归成功; } 无效关闭(){ //释放面 SDL_自由曲面(屏幕); //破坏窗口 SDL_窗口(窗口); //SDL_退出(); SDL_退出(); } int main(){ bool running=true; SDL_事件; if(init(“我的窗口”,800600)){ printf(“祝贺您”); }否则{ printf(“对不起:(\n”); } (跑步时){ //start=SDL_GetTicks(); while(SDL_事件和事件)){ 开关(event.type){ 案例SDL_退出: 运行=错误; 打破 } SDL_更新内表面(窗口); } } close(); }
我尝试创建一个单独的函数来初始化SDL窗口,然后尝试将surface附加到它,但它给出了创建窗口时发生SDL错误? #包括 #包括 #包括 bool init(字符*标题、整数宽度、整数高度); 无效关闭(); SDL_Window*Window=NULL; SDL_表面*屏幕=空; bool init(字符*标题、整型宽度、整型高度){ 布尔成功=真; //SDL_在成功时初始化0,在失败时返回负值 if(SDL_Init(SDL_Init_EVERYTHING)!=0){ SDL_日志(“无法初始化SDL:%s”,SDL_GetError()); 成功=错误; } //创建窗口和曲面 window=SDL_CreateWindow(显示标题、SDL_WINDOWPOS_未定义、SDL_WINDOWPOS_未定义、宽度、高度、SDL_window_); //SDL_CreateWindow在创建时返回窗口,在失败时返回NULL 如果(!窗口){ SDL_日志(“无法创建窗口:%s”,SDL_GetError()); 成功=错误; }否则{ //获取窗口表面 屏幕=SDL_GetWindowSurface(窗口); 如果(屏幕==NULL){ SDL_日志(“无法获取窗口表面:%s”,SDL_GetError()); 成功=错误; } } 回归成功; } 无效关闭(){ //释放面 SDL_自由曲面(屏幕); //破坏窗口 SDL_窗口(窗口); //SDL_退出(); SDL_退出(); } int main(){ bool running=true; SDL_事件; if(init(“我的窗口”,800600)){ printf(“祝贺您”); }否则{ printf(“对不起:(\n”); } (跑步时){ //start=SDL_GetTicks(); while(SDL_事件和事件)){ 开关(event.type){ 案例SDL_退出: 运行=错误; 打破 } SDL_更新内表面(窗口); } } close(); },c,segmentation-fault,sdl,sdl-2,C,Segmentation Fault,Sdl,Sdl 2,我尝试创建一个单独的函数来初始化SDL窗口,然后尝试将surface附加到它,但它给出了分段错误(堆芯转储)。有时它也给出了错误Info:invalid Window 如果我不创建一个单独的函数并仅在主函数中运行此代码,它会工作!您忘记实现一个关键函数,它是: SDL_BlitSurface(SDL_曲面*,常数SDL_Rect*,SDL_曲面*,SDL_Rect*) 此功能可以blit曲面并将数据(图形信息)加载到SDL_曲面结构中 如果您想了解有关此功能的更多详细信息,可以查看链接 链接:为
分段错误(堆芯转储)
。有时它也给出了错误Info:invalid Window
如果我不创建一个单独的函数并仅在主函数中运行此代码,它会工作!您忘记实现一个关键函数,它是: SDL_BlitSurface(SDL_曲面*,常数SDL_Rect*,SDL_曲面*,SDL_Rect*) 此功能可以blit曲面并将数据(图形信息)加载到SDL_曲面结构中 如果您想了解有关此功能的更多详细信息,可以查看链接
链接:为什么在
SDL\u GetWindowSurface()
提供给你的SDL\u FreeSurface()
上调用SDL\u FreeSurface()
呢?你是如何编译这段代码的,你有一些编译痕迹吗?@genpfault我做了,但有相同的错误。永远不要将你自己的函数定义为奇怪的close
别名(这让事情变得更有趣,是一个弱符号)。或者至少让你的函数<代码>静态< /代码>。@ GNPFAUTAN是这个问题一次又一次地被问到,LLYYLE因为LaZyfo教程非常流行,并且命名他们的函数<代码>关闭< /代码>,但是使用C++(用Mangle),所以它不是问题。
#include<SDL2/SDL.h>
#include<stdio.h>
#include<stdbool.h>
bool init(char *title, int width, int height);
void close();
SDL_Window *window = NULL;
SDL_Surface *screen = NULL;
bool init(char *title, int width, int height){
bool success = true;
// SDL_Init 0 on success and returns negative on failure
if( SDL_Init(SDL_INIT_EVERYTHING) != 0 ){
SDL_Log("Couldn't initialize SDL: %s",SDL_GetError());
success = false;
}
// creating Window and Surface
window = SDL_CreateWindow(title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, SDL_WINDOW_SHOWN );
// SDL_CreateWindow returns window on creation and NULL on failure
if ( !window ){
SDL_Log("Couldn't create window: %s",SDL_GetError());
success = false;
} else {
// get window surface
screen = SDL_GetWindowSurface( window );
if ( screen == NULL ){
SDL_Log("Couldn't get window surface: %s",SDL_GetError());
success = false;
}
}
return success;
}
void close(){
// deallocate surface
SDL_FreeSurface( screen );
// destroy window
SDL_DestroyWindow( window );
// SDL_Quit();
SDL_Quit();
}
int main(){
bool running = true;
SDL_Event event;
if( init("My Window", 800, 600) ){
printf("Congrats\n");
} else {
printf("Sorry :(\n");
}
while( running ) {
// start = SDL_GetTicks();
while ( SDL_PollEvent( &event ) ){
switch( event.type ){
case SDL_QUIT:
running = false;
break;
}
SDL_UpdateWindowSurface( window );
}
}
close();
}