Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde