Предположим, чтобы отобразить BMP-изображение в переднем буфере окна SDL. Я играл с кодом. И я думаю, что что-то не так с моей функцией init(). Я новичок в SDL. Но должна быть проблема с моими указателями или что-то, что мне не хватает в функциях SDL EDIT: Я использовал GDB, и оказалось, что моя функция close() была проблемой. Я считаю, что это было потому, что я освобождал память, которая была установлена в NULL? Я избавился от близкого будущего и просто освободил память после моей функции задержки.Идентификация сбоя сегментации 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
Какое «закрытие» должно делать, во всяком случае? –
Дикая догадка: если SDL_Init терпит неудачу, вы получаете сообщение (и никогда не увидите его, потому что нет конечной новой строки и, следовательно, нет неявного флеша), но затем маршируйте и пытайтесь создать окно в любом случае. Аналогично с поверхностью окна. В этот момент в меню находится отладчик * *. – WhozCraig