이것은 bmp 이미지를 SDL 윈도우 프런트 버퍼에 표시하는 것으로 가정합니다. 코드를 가지고 놀았습니다. 그리고 내 init() 함수에 문제가 있다고 생각합니다. SDL을 처음 사용합니다. 하지만 내 포인터 또는 내가 SDL 기능에 대해 놓친 뭔가가 있어야합니다. 편집 : 나는 GDB를 사용하고 그것이 내 close() 함수가 문제라고 판명했다. 나는 그것이 NULL로 설정된 메모리를 해제했기 때문에 그것이라고 생각합니까? 나는 가까운 연기를 없애고 지연 기능을 수행 한 후에 mem를 해방했다.SDL2를 초기화하는 세그먼트 오류입니다. 내가 기억에 잘못 무엇을하고 있니?
#include <SDL2/SDL.h>
#include <stdio.h>
#include <stdbool.h>
#define SCREENWIDTH 640
#define SCREENHEIGHT 480
SDL_Window *win = NULL;
SDL_Surface *scrn = NULL;
SDL_Surface *mscrn = NULL;
bool init()
{
bool suc = true;
char name[11] = "Hello SDL";
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("%s", SDL_GetError());
suc = false;
}
win = SDL_CreateWindow(name, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREENWIDTH, SCREENHEIGHT, SDL_WINDOW_SHOWN);
if (win == NULL) {
printf("%s", SDL_GetError());
suc = false;
}
scrn = SDL_GetWindowSurface(win);
return suc;
}
bool loadmedia()
{
bool suc = true;
mscrn = SDL_LoadBMP("hello_world.bmp");
if (mscrn == NULL) {
printf("%s", SDL_GetError());
suc = false;
}
return suc;
}
void close()
{
SDL_FreeSurface(mscrn);
SDL_DestroyWindow(win);
SDL_Quit();
}
int main(int argc, char* args[])
{
if (!init()) {
close();
return 1;
}
if (!loadmedia()) {
close();
return 1;
}
SDL_BlitSurface(mscrn, NULL, scrn, NULL);
SDL_UpdateWindowSurface(win);
SDL_Delay(3000);
close();
return 0;
}
컴파일러가'close()'에 관해 당신에게 무엇을 이야기합니까? – EOF
어쨌든'close'가해야 할 일은 무엇입니까? –
야생 추측 : SDL_Init이 실패 할 경우 메시지가 표시됩니다 (줄 바꿈 줄이없고 암시 적 플러시가 없어 보이지 않음). 그런 다음 행을 만들고 행을 만들려고합니다. 윈도우 표면과 마찬가지로. 이 시점에서 A * 디버거 *가 메뉴에 있습니다. – WhozCraig