这个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的返回值.如果这些失败,并且您继续执行,则可能会遇到奇怪的行为或崩溃.
您正在编写未分配的内存.
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的返回值.如果这些失败,并且您继续执行,则可能会遇到奇怪的行为或崩溃.