声明任何标准变量时,SDL崩溃

 PHP先锋官 发布于 2023-02-09 06:06

这个SDL程序运行正常(显示一个窗口并在其上绘制一个位图),但是,如果我在程序中声明任何变量(例如int,long等),窗口会冻结并且是白色而不是黑色而且没有任何绘制.有什么可能导致这种情况?

#include 
#include 
#include 

int main(int argc, char* argv[]) {
    // line below will cause SDL crash
    // int blabla = 640; 
    SDL_Window *window;
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow(
        "A rather exceptional SDL window",
        SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,
        640,
        480,
        SDL_WINDOW_OPENGL
    );
    if (window == NULL) {
        printf("Could not create window: %s\n", SDL_GetError());
        return 1;
    }
    SDL_Renderer *renderer;
    SDL_Texture *texture;
    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    SDL_Surface *brush;
    brush = IMG_Load("brush2.png");
    texture = SDL_CreateTextureFromSurface(renderer, brush);
    SDL_RenderClear(renderer);
    SDL_Rect *sRect, *dRect;
    sRect->w = 10;
    sRect->h = 4;
    sRect->x = 0;
    sRect->y = 0;
    dRect->w = 10;
    dRect->h = 4;
    dRect->x = 10;
    dRect->y = 10;
    SDL_RenderCopy(renderer, texture, sRect, dRect);
    SDL_RenderPresent(renderer);
    SDL_Delay(1000);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

user694733.. 6

您正在编写未分配的内存.

SDL_Rect *sRect, *dRect;
sRect->w = 10; /* w doesn't exist. Writing is undefined behaviour. */

sRect并且dRect只是指针.在访问struct成员之前,他们需要指向有效的内存.

您可以在堆栈中声明它们:

SDL_Rect sRect, dRect;
sRect.w = 10;
sRect.h = 4;
...
SDL_RenderCopy(renderer, texture, &sRect, &dRect);

您还应该检查SDL_-functions的返回值.如果这些失败,并且您继续执行,则可能会遇到奇怪的行为或崩溃.

1 个回答
  • 您正在编写未分配的内存.

    SDL_Rect *sRect, *dRect;
    sRect->w = 10; /* w doesn't exist. Writing is undefined behaviour. */
    

    sRect并且dRect只是指针.在访问struct成员之前,他们需要指向有效的内存.

    您可以在堆栈中声明它们:

    SDL_Rect sRect, dRect;
    sRect.w = 10;
    sRect.h = 4;
    ...
    SDL_RenderCopy(renderer, texture, &sRect, &dRect);
    

    您还应该检查SDL_-functions的返回值.如果这些失败,并且您继续执行,则可能会遇到奇怪的行为或崩溃.

    2023-02-09 06:26 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有