c - SDL_FillRect中的分段错误



我正在使用 C 语言中的 SDL2 库。

做了一个测试程序来打开一个白色窗口,但是即使构建它时没有错误或警告,我SDL_FillRect函数也遇到了分割错误。

代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
static const int window_width = 1000;
static const int window_height = 1000;
int main(int argc, char* argv[])
{
    //Window
    SDL_Window *window = NULL;
    //Window Surface where things will be shown
    SDL_Surface *surface = NULL;
    //Inicializar SDL
    if(SDL_Init(SDL_INIT_VIDEO) == -1)
    {
        printf("Failed to initialize SDL2. SDL Error: %s", SDL_GetError());
    }
    else
    {
        window = SDL_CreateWindow("Test", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, window_width, window_height, SDL_WINDOW_SHOWN );
        if(window == NULL)
            printf("Failed to create SDL2 window. SDL Error: %s", SDL_GetError());
        else
        {
            //Fill window with white color
            SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0xFF, 0xFF, 0xFF));
            //Update surface with new changes
            SDL_UpdateWindowSurface(window);
            //Wait before closing (parameter in miliseconds)
            SDL_Delay(4000);
        }
    }
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

您遇到分段错误surface因为NULL

此示例代码直接取自 SDL wiki (https://wiki.libsdl.org/SDL_FillRect( 演示如何在调用SDL_FillRect()之前创建SDL_Surface

/* Declaring the surface. */
SDL_Surface *s;
/* Creating the surface. */
s = SDL_CreateRGBSurface(0, width, height, 32, 0, 0, 0, 0);
/* Filling the surface with red color. */
SDL_FillRect(s, NULL, SDL_MapRGB(s->format, 255, 0, 0));

相关内容

  • 没有找到相关文章