Problème avec la fonction OnTimer() sous vc++

Problème avec la fonction OnTimer() sous vc++ - C++ - Programmation

Marsh Posté le 26-11-2005 à 22:13:02    

Bonjour,
 
Je réalise actuellemnent un casse-briques sous visual c++ 6.0 et j'ai un problème concernant la fonction OnTimer().
 
J'en suis au stade ou j'anime la balle dans la fenetre en la faisant rebondir sur les bord. Pour cela dans la fonction OnKeyDown:
 

Code :
  1. if(nChar==VK_SPACE)
  2.         SetTimer(1,10,NULL);


 
dans la fonction OnTimer
 

Code :
  1. RedrawWindow(pDoc->p_part->p_bal->rect);


 
C'est a dire je decide de redessiner uniquement la balle.
 
Je possede une classe CPartie, et une classe Cballe.
J'ai créé un pointeur CPartie (p_part) dans le Doc et un pointeur CBalle (p_bal) dans la classe CPartie. D'ou le pDoc->p_part->p_bal->rect2.
 
Dans la classe CBalle j'ai créer un rect de la classe CRect que j'ai instancié dans le constructeur.J'ai également créé une fonction deplacement_balle() qui m'incrémente les points de la balle défini dans le rect.SetRect(...).
 
Pour finir voila le code inscrit dans la fonction OnDraw(CDC* pDC) :
 

Code :
  1. CPen pen1(PS_NULL,5,RGB(0,221,255));
  2. pDC->SelectObject(&pen1);
  3.   CBrush brush3 (6,COULEUR_BALLE);
  4.   pDC->SelectObject(&brush3);
  5.   pDoc->p_part->p_bal->deplacement_balle();
  6.   pDC->Ellipse(pDoc->p_part->p_bal->rect2);


 
Je passe les détails des condition pour le rebondissement mon problème ne venant pas de la.
 
Bref, tout cela pour en venir a mon probleme :
 
Lorsque je lance le jeux tout fonctionne à merveille, la balle se deplace, elle rebondit, oui... mais pendant environ une trentaine de seconde, car tout a coup sans aucune raison (apparente!!) un message d'erreur apparait :
 
Je cite : L'instruction à "0x5f43dfb1" emploie l'adresse mémoire "0x00000004" la mémoire ne peut pas etre "read".
 
Arggggggggggggggg!!!!
 
Je ne vois vraiment pas d'ou peut venir le problème, je sais que le problème viens de la fonction OnTimer() mais je ne sais pas ce que j'ai mal fait. J'ai essayé de faire un KillTimer(o) puis une relance immédiate, même problème!!
 
Pouvez vous m'aider s'il vous plait;
 
J'ai aussi un autre petit probleme mais bien moins important que je posterait dans un autre message.
 
Je vous remercie de l'attention que vous avez porté a mon message.
 
 

Reply

Marsh Posté le 26-11-2005 à 22:13:02   

Reply

Marsh Posté le 26-11-2005 à 23:31:39    

Le message ne concerne pas forcément le timer. Le timer est utilisé dans de nombreuses applications sans poblème. Le message indique qu'un pointeur ne pointe plus au bon endroit. Cela peut venir,  
 
- soit de la routine d'affichage qui déborderait de l'espace alloué, par exemple avec x = -1 et a = t[x]
 
- soit de la pile qui se remplit plus vide qu'elle ne se vide, et finit par déborder, ce qui peut être le cas si le timer est trop petit par rapport au temps que prend l'affichage. Pour en avoir le coeur net, il faudrait voir si cela plante encore en mettant un timer 10 fois plus long, et en attendant 11 fois plus longtemps.

Reply

Marsh Posté le 26-11-2005 à 23:55:45    

Tout d'abord merci pour ta réponse.
Je ne comprends pas tout a fait la raison que tu expose en premier choix (routine d'affichage)
Concernant ta seconde raison possible je pense que sa peut tout a fait etre la raison. Pense tu que le fait que le "pointage" soit trop "telephonné" puisse etre la raison. pDoc->p_part->p_bal->rect
 
Pense tu que si je supprime une classe intermédiaire cela puisse regler le pb? (par exemple la classe CBal)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed