J'aurais pas un problème de mémoire?

J'aurais pas un problème de mémoire? - C++ - Programmation

Marsh Posté le 23-05-2003 à 22:24:56    

Salut,
 
alors voilà je me pose cette question, parce que j'ai remarqué que quand je compile souvent mon programme pour vérifier que ce que j'ai ajouté est correct, au bout d'un certain temps, Windows me fait des trucs bizarres :pt1cable:  
 
Par exemple ma liste de favoris perd des éléments, j'ai des icônes qui disparaissent, voient leur taille modifiée...
 
Mais si je redémarre, tout rentre dans l'ordre.
 
Tout ça ne serait pas du à un problème de mauvaise gestion de la mémoire?
 
Il faut dire qu'en ce domaine, j'ai quelques lacunes (s'il n'y avait que là... :D )
 
Par exemple: si je fais apparaître une nouvelle fenêtre:
 

Code :
  1. NewForm = new TNewForm(this);
  2. NewForm->Show();


 
Où je dois mettre

Code :
  1. delete NewForm

? Dans l'événement OnDestroy de NewForm?
ou bien dans le OnDestroy de la fenêtre appellante?
 
Bref, je galère...
 
Vous auriez pas une url sur la bonne gestion de tout ça?
 
Merci d'avance...


---------------
Another .Net Blog
Reply

Marsh Posté le 23-05-2003 à 22:24:56   

Reply

Marsh Posté le 23-05-2003 à 23:12:59    

Pour tes problèmes sous Windows, je ne vois pas trop. Cependant, il est vrai que si tu développes en utilisant les fonctions du Shell, il se peut que certaines erreurs laissent Windows dans un état instable (surtout si tu développes des DLL d'extension pour le Shell).
 

haazheel a écrit :

Où je dois mettre

Code :
  1. delete NewForm

? Dans l'événement OnDestroy de NewForm?
ou bien dans le OnDestroy de la fenêtre appellante?


 
Plutôt dans le OnDestroy de la fenêtre parente. En effet, sinon tu risque d'effectuer des actions sur ton objet alors qu'il est déjà détruit. De même, on peut imaginer que tu décides de créer ton objet statiquement et alors ton delete va planter. En gros, il faut, dans la mesure du possible, que l'objet qui crée un objet, le détruise également.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 23-05-2003 à 23:47:01    

Merci de ton aide...
 
Cependant j'ai découvert qu'il y a avec C++ Builder un utilitaire nommé CodeGuard qui permet de détecter les fuites de mémoire...
 
Effectivement il m'en a détecté.
 
Ainsi à un endroit du programme je faisais:
 

Code :
  1. delete[] ListeNomStats,ListeStats,ListeCouleurStats;


 
Et en fait ça marche pas :D  
 
Il faut faire:
 

Code :
  1. delete[] ListeNomStats;
  2. delete[] ListeStats;
  3. delete[] ListeCouleurStats;


 
Qui là ne m'indique plus d'erreur...


---------------
Another .Net Blog
Reply

Marsh Posté le 24-05-2003 à 00:37:30    

un truc aussi qui en général détruit complétement ton systeme au niveau graphique (qu'il soit 2000, xp...), c'est quand tu touches au devices context, au fontes, etc. et que tu rates fortement d'appeler les fonctions pour liberer ceux-ci ou bien que tu écris un peu n'importe-ou (surtout ce dernier cas).
 
j'avais un prog ou je ratais fortement, et ca te tuait toutes les icones de windows ,te mettait la fonte 'system' partout, et les menus (surtout le 'démarrer') avaient pas le droit d'afficher quoi que ce soit.

Reply

Sujets relatifs:

Leave a Replay

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