Se connecter / S'enregistrer
Votre question

Problème [c] SDL mais ou est l'erreur ?

Tags :
  • Programmation
Dernière réponse : dans Programmation
16 Janvier 2008 17:40:40

Salut

je suis en train de m'amuser à créer des fenetres avec des rectangles sans l'aide de tuto, mais la je seche voila ce que j'ai fait:

  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <SDL/SDL.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. SDL_Surface *ecran = NULL, *rectangle[3] = {NULL};
  8. SDL_Rect positionRectangle[3];
  9. SDL_Event event;
  10. int continuer = 1, i = 0;
  11. positionRectangle[0].x = (600/2) - (220/2);
  12. positionRectangle[0].y = (300/2) - (100/2);
  13. positionRectangle[1].x = (600/2) - (110/2);
  14. positionRectangle[1].y = (300/2) - (100/2);
  15. positionRectangle[2].x = (600/2) - (110/2);
  16. positionRectangle[2].y = (300/2) - (100/2);
  17. positionRectangle[3].x = (600/2) - (110/2);
  18. positionRectangle[3].y = (300/2) - (50/2);
  19. SDL_Init(SDL_INIT_VIDEO);
  20.  
  21. SDL_WM_SetCaption("titre fenetre", NULL);
  22.  
  23. ecran = SDL_SetVideoMode(600, 300, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
  24.  
  25. rectangle[0] = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 100, 32, 0, 0, 0, 0);
  26. rectangle[1] = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 100, 32, 0, 0, 0, 0);
  27. rectangle[2] = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 100, 32, 0, 0, 0, 0);
  28. rectangle[3] = SDL_CreateRGBSurface(SDL_HWSURFACE, 110, 50, 32, 0, 0, 0, 0);
  29.  
  30.  
  31. for ( i = 0; i <= 3; i++)
  32. {
  33. SDL_FillRect(rectangle[i], NULL,SDL_MapRGB(ecran->format, 255, 200, 255));
  34. SDL_BlitSurface(rectangle[i], NULL, ecran, &positionRectangle[i]);
  35.  
  36. }
  37.  
  38. SDL_Flip(ecran);
  39. while (continuer)
  40. {
  41.  
  42. SDL_WaitEvent(&event);
  43. switch(event.type)
  44. {
  45. case SDL_QUIT:
  46. continuer = 0;
  47. break;
  48. }
  49. }
  50.  
  51.  
  52.  
  53. SDL_FreeSurface(ecran);
  54. for (i = 0; i <= 3; i++)
  55. {
  56. SDL_FreeSurface(rectangle[i]);
  57. }
  58. SDL_Quit();
  59. return EXIT_SUCCESS;
  60. }


les 2 problèmes sont:

- Ca affiche seulement un rectangle

-Quand je quitte le programme avec la croix rouge j'ai cette erreur:

Run-Time Check Failure #2 - Stack arround the variable 'rectangle' was corrupted.

Est-ce que quelqu'un pourrait me dire ou est l'erreur dans mon code :) 

Mici

Autres pages sur : probleme sdl erreur

a b L Programmation
16 Janvier 2008 20:58:43

La boucle principale de ton programme est là:

  1. while (continuer)
  2. {
  3. SDL_WaitEvent(&event);
  4. switch(event.type)
  5. {
  6. case SDL_QUIT:
  7. continuer = 0;
  8. break;
  9. }
  10. }

Et tu fais quoi? rien :) 

A l'éxécution, le programme suit les instruction les unes après les autres jusqu'à la fin du main où il quitte. Donc, ton programme est actif dans la boucle principale. Avant, c'est juste pour initialiser des variables, après pour rendre la mémoire, et c'est dans la boucle principale que ton programme réagit.

Pour ton erreur, déjà je vois que tu fais un tableau rectangle[3], ce qui signifie que tu alloues 3 SDL_Surface* accessibles par les index 0, 1 et 2. Toi, tu en utilises 4. Tu fais du buffer overflow, tu vas peut-être écrire en mémoire dans positionRectangle. Commence par corriger ça.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS