Dies ist nur ein BMP-Bild auf dem SDL-Fenster Front-Puffer anzuzeigen. Ich habe mit dem Code herumgespielt. Und ich denke, dass etwas mit meiner init() Funktion nicht stimmt. Ich bin neu bei SDL. Aber es muss ein Problem mit meinen Zeigern geben oder etwas, das ich an SDLs Funktionen vermisse. EDIT: Ich habe GDB benutzt und es stellte sich heraus, dass meine close() Funktion das Problem war. Ich glaube, es war, weil ich Speicher freigab, der auf NULL gesetzt wurde? Ich habe die nahe Funktion losgeworden und habe nach meiner Verspätungsfunktion nur das Mem freigegeben.Segmentierungsfehler, der SDL2 initialisiert. Was mache ich falsch mit der Erinnerung?
#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;
}
Was sagt Ihr Compiler über 'close()'? – EOF
Was soll "nah" eigentlich schon machen? –
Wild rate: Wenn SDL_Init fehlschlägt, meldest du es (und siehst es nie, weil es keinen abschließenden Zeilenumbruch und somit keinen impliziten Flush gibt), aber marschiere weiter und versuche trotzdem, ein Fenster zu erstellen. Ebenso mit der Fensteroberfläche. Ein * Debugger * ist an dieser Stelle im Menü. – WhozCraig