Bonjour,
Dans le but de coder un jeu en C avec SDL 1.2, j'ai décidé de commencer par développer un menu. Le truc, c'est que je voulais faire plusieurs fonctions afin d'avoir un code 'optimal' et pratique.
Mais quand je lance, j'ai un seg fault. J'ai effectué un breakpoint avec gdb :
Il y'a bien un problème avec SDL_FreeSurface() mais je comprends toujours pas où est le problème, même en relisant mon code plusieurs fois.0x00007ffff7b6b5f5 in SDL_FreeSurface()
Mon main.c :
Mon menu.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_ttf.h> #include "menu.h" int main(int argc, char *argv[]) { menu m; SDL_Init(SDL_INIT_VIDEO); m.screen = SDL_SetVideoMode(1280,960,32,SDL_HWSURFACE|SDL_DOUBLEBUF); afficherMenu(&m); SDL_Quit(); return 0; }
et mon menu.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_ttf.h> #include <SDL/SDL_mixer.h> #include "menu.h" void initialiser(menu *m) { (m->screen)=NULL; (m->background)=IMG_Load("bg.jpg"); (m->continuer)=1; } void updateMenu(menu *k) { (k->etat)=1; SDL_Event event; SDL_PollEvent(&event); switch(k->etat) { case 1: SDL_BlitSurface(k->background,NULL,k->screen,NULL); SDL_Flip(k->screen); switch(event.type) { case SDL_QUIT: k->continuer=0; break; } break; } SDL_FreeSurface(k->background); } unsigned int afficherMenu(menu *m) { menu k; while(m->continuer) { updateMenu(&k); } return 1; }
Quelqu'un peut m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef MENU_H_INCLUDED #define MENU_H_INCLUDED #include <stdio.h> #include <stdlib.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_ttf.h> typedef struct { SDL_Surface *screen; SDL_Surface *background; int etat,continuer; }menu; void initialiser(menu *m); void updateMenu(menu *k); unsigned int afficherMenu(menu *m); #endif
Merci
Partager