Mon programme fait planter windows !

Lustuc Messages postés 30 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 20 octobre 2009 - 8 janv. 2009 à 23:33
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 10 janv. 2009 à 12:09
Bonjour,

J'ai fait un programme d'analyse graphique, qui tourne en boucle (volontairement), mais au bout d'une dizaine de minute, l'écran de mon PC devient entièrement blanc, avec de temps en temps un morceau d'application qui apparaît puis disparaît l'instant d'après. Je suis obligé de rebouter le PC.

C'est comme si mon programme avait saturé la mémoire. Est-ce possible? Sachant que les variables utilisées occupent peu de place, la plus importante est une table à 2 dimension 10 caractères sur 20.

Si quelqu'un a une idée, ça me serait d'un grand secours...

8 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
9 janv. 2009 à 02:26
Salut,
Il serait préférable de nous montrer le code de la boucle. Il pourrait s'agir de fuites qui s'accumulent.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
9 janv. 2009 à 11:23
Bonjour,


Ce sont les symptomes classiques d'une mauvaise libération de ressources GDI (DC, Pen, Brush, ...) dans ta fonction d'affichage.


ed73
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
9 janv. 2009 à 16:34
Salut,
Sans doute, oui. Un topic parlant du même problème a été résolu il n'y a pas si longtemps. Mais en effet un bout de code serait cool.

Cordialement, uaip.
0
Lustuc Messages postés 30 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 20 octobre 2009
9 janv. 2009 à 21:21
Merci pour vos réactions.

Hélas je ne peux pas vous donner ma boucle, non pas que je ne veuille pas, mais il s'agit d'une boucle géante. La boucle principale (dans la fonction main) doit faire 5 pages word et elle fait appelle à 8 fonctions qui chacune font entre 1 et 7 pages word.

Vue que ça plantait mon PC, pour garder une trace le programme écrit un fichier texte au fur et à mesure de son exécution, et il ne plante jamais au même endroit.

uaip, je me lance à la recherche du topic dont tu parles, si tu tombe dessus, pense à moi :)




ed73, y a t-il un remède pour "libérer de la ressource"?

merci encore, lustuc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
9 janv. 2009 à 21:40
Euh ben je l'avais lu ya pas si longtemps, mais les fuites de mémoire venaient d'une mauvaise libération des ressources (HPEN, HBRUSH, etc) comme le dit ed73.

Cordialement, uaip.
0
ed73 Messages postés 276 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 avril 2013 2
9 janv. 2009 à 22:24
Oui il y a un remède pour libérer de la ressource, c'est une des règles de base de la programmation : Toujours penser à libérer les objets ou ressources qu'on a alloués.

new -> delete
hPen = CreatePen (...) -> DeleteObject(hPen)
hBrush = CreateSolidBrush(...) -> DeleteObject(hPen)
hDC = GetDC(...) -> DeleteDC(hDC)
BeginPaint(...) -> EndPaint(...)
etc...

Il ne faut pas détruire une ressource si elle est sélectionnée dans un DC.

erd73
0
Lustuc Messages postés 30 Date d'inscription lundi 18 août 2008 Statut Membre Dernière intervention 20 octobre 2009
10 janv. 2009 à 11:16
En gros mon programme est constitué d'une succession de :

hdc = GetDC(handle);
color = GetPixel(hdc, cursor.x, cursor.y);
ReleaseDC(handle,hdc);
traitements des infos (while, for, if...)
lecture /écriture dans un fichier texte (fopen, fscanf, fprintf, fclose)
ecriture en console printf

hormis le GetDC, je ne vois pas ce qui nécessite d'être libéré....

si quelqu'un a une idée...
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
10 janv. 2009 à 12:09
ed73, new / delete, c'est du C++. En C ça sera malloc() / free().
Dis comme ça Lustuc, en effet je ne vois pas.

Cordialement, uaip.
0
Rejoignez-nous