【发布时间】:2013-12-20 07:24:07
【问题描述】:
此 SDL 程序运行良好(显示一个窗口并在其上绘制位图),但是,如果我在程序中声明任何变量(例如 int、long 等),窗口将冻结并变为白色而不是黑色什么都没有。什么可能导致这种情况?
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
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;
}
【问题讨论】:
-
你在哪里声明了那个变量?
-
@rullof 查看注释掉的行“int blabla = 640” - 是的,确实,如果声明了不相关的变量(或任何不相关的变量),SDL 将冻结并不画。如果没有 SDL 代码,它将可以正常编译并且不会出现任何问题,但由于某种原因,如果我尝试定义任何不相关的标准变量(例如注释掉的行),SDL 会冻结。
-
换句话说,由于“int blabla = 640”被注释掉了,所以你在上面看到的代码编译得很好。如果你取消注释 "int blabla = 640" 或写 "int bob = 44" 或 "long joe = 34",它当然会编译得很好,但 SDL 会冻结 而不会绘制。我希望这是有道理的。