Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我试图初始化函数中的SDL_窗口,但它总是失败,除非我定义SDL_窗口*win;作为全局变量_C_Runtime Error_Sdl - Fatal编程技术网

C 我试图初始化函数中的SDL_窗口,但它总是失败,除非我定义SDL_窗口*win;作为全局变量

C 我试图初始化函数中的SDL_窗口,但它总是失败,除非我定义SDL_窗口*win;作为全局变量,c,runtime-error,sdl,C,Runtime Error,Sdl,我试图初始化函数中的SDL_窗口,但它总是失败,除非我定义SDL_窗口*win;作为一个全局变量。代码如下: #include<SDL2/SDL.h> #include<stdio.h> #define SCREEN_WIDTH 800 #define SCREEN_HEIGHT 600 SDL_Surface*Init(SDL_Window*win,char*title,int x,int y,int w,int h,Uint32 flags); int main(

我试图初始化函数中的SDL_窗口,但它总是失败,除非我定义SDL_窗口*win;作为一个全局变量。代码如下:

#include<SDL2/SDL.h>
#include<stdio.h>

#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 600
SDL_Surface*Init(SDL_Window*win,char*title,int x,int y,int w,int h,Uint32 flags);

int main(int argc,char**argv){
SDL_Surface *screen=NULL;
SDL_Window*win=NULL;

screen=Init(win,"SDL_Test",
            SDL_WINDOWPOS_CENTERED,
            SDL_WINDOWPOS_CENTERED,
            SCREEN_WIDTH,
            SCREEN_HEIGHT,
            SDL_WINDOW_SHOWN);

SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0xFF,0x00,0x00));
SDL_UpdateWindowSurface(win);
SDL_Delay(2000);


}

SDL_Surface*Init(SDL_Window*win,
                 char*title,
                 int x,
                 int y,
                 int w,
                 int h,
                 Uint32 flags){
SDL_Surface*temp=NULL;

if(SDL_Init(SDL_INIT_EVERYTHING)){
        printf("\nError : %s",SDL_GetError());
        SDL_ClearError();
        return NULL;
}
win=SDL_CreateWindow(title,x,6,w,h,flags);

if(!win){
        printf("\nError: %s",SDL_GetError());
        SDL_ClearError();
        return NULL;
}
temp=SDL_GetWindowSurface(win);
if(!temp){
        printf("\nError: %s",SDL_GetError());
        SDL_ClearError();
        return NULL;
}
return temp;
}
#包括
#包括
#定义屏幕宽度800
#定义屏幕高度600
SDL_表面*Init(SDL_窗口*win,char*title,int x,int y,int w,int h,Uint32标志);
int main(int argc,字符**argv){
SDL_表面*屏幕=空;
SDL_窗口*win=NULL;
screen=Init(赢,“SDL_测试”,
SDL_窗口位置居中,
SDL_窗口位置居中,
屏幕宽度,
屏幕高度,
SDL_窗口(如图所示);
SDL_FillRect(屏幕,NULL,SDL_映射RGB(屏幕->格式,0xFF,0x00,0x00));
SDL_更新内表面(win);
SDL_延迟(2000年);
}
SDL_表面*Init(SDL_窗口*win,
字符*标题,
int x,
INTY,
int w,
int h,
Uint32(国旗){
SDL_表面*温度=零;
if(SDL_Init(SDL_Init_EVERYTHING)){
printf(“\n错误:%s”,SDL_GetError());
SDL_ClearError();
返回NULL;
}
win=SDL_CreateWindow(标题、x、6、w、h、标志);
如果(!赢){
printf(“\n错误:%s”,SDL_GetError());
SDL_ClearError();
返回NULL;
}
温度=SDL_GetWindowSurface(win);
如果(!temp){
printf(“\n错误:%s”,SDL_GetError());
SDL_ClearError();
返回NULL;
}
返回温度;
}
如果我将SDL_Window*win声明为全局变量,它会显示一个红色屏幕(它应该显示),但是如果
我在main()中定义SDL_Window*win并将其传递给Init(),它将显示一个白色屏幕(错误?)。

您没有在main函数中更新
win
。在
c
中,按值传递变量,如果更改指针的值(或在您的情况下获胜),则更改不会发生在函数之外


最短(但不是最好)的解决方案是返回窗口指针
win
,然后使用
SDL\u GetWindowSurface(win)

获取曲面,谢谢您的帮助。:)