Bonjour,
Avant d’exécuter la fonction exit dois-je libérer toute la mémoire allouée dynamiquement (par le biais par exemple de la fonction atexit) ou cela est fait automatiquement ?
Merci. A+
Bonjour,
Avant d’exécuter la fonction exit dois-je libérer toute la mémoire allouée dynamiquement (par le biais par exemple de la fonction atexit) ou cela est fait automatiquement ?
Merci. A+
Le mieux, c'est d'adopter les bonnes habitudes de programmation. C'est au programmeur de libérer la mémoire qu'il a allouée, lorsqu'il n'en a plus besoin. Même si les OS courants savent nettoyer la mémoire lorsqu'un processus se termine, ce n'est pas propre de leur demander de le faire.
Bonjour,
Oui vous le devez !
La fonction exit() ne fait rien d'autre que de quitter le programme (elle ne s'occupe absolument pas de la mémoire, et de toute façon, elle ne saurai pas retrouver tout vos pointeurs).
La fonction atexit() permet de définir une fonction qui sera appelé lors de la fermeture du programme. Dans la fonction que vous allez spécifier à atexit, vous pouvez tenter de faire un peu de nettoyage, mais cela vous forcera certainement à mettre vos pointeurs dans des variables globales, ce qui n'est pas une bonne solution non plus.
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Donc si j'ai bien compris :
Si dans mon programme une fonction remonte une erreur critique, je dois libérer toute la mémoire allouée à droite à gauche avant de quitter le programme en évitant de passer par atexit() qui m'obligerait à mettre mes pointeurs dans une structure globale.
C'est pas vraiment pratique je trouve. Comment, lorsqu'une erreur survient, avoir accès à tous les pointeurs des objets alloués dynamiquement ?
Quelle serait la meilleure démarche pour traiter ce problème de gestion d'erreurs ?
Si par mégarde j'oublie de libérer une zone mémoire allouée dynamiquement avant de quitter le programme, quand cette zone mémoire sera t-elle libérée ?
Merci. A+
Tu te débrouilles pour que ton programme récupères l'erreur (sans crasher) et tu le quittes normalement.
Si tu oublies de libérer de la mémoire que tu as allouée, si tu n'es pas sous windows 95 tu n'as pas trop de soucis à te faire, la mémoire sera libérée dès que tu processus aura quitter, mais il est bien mieux de ne pas laisser l'os le faire (comme l'a dit jeroman) car cette solution n'est pas "propre".
A ceux qui pensent que qu'il est sale de terminer sans libérer la totalité de ce qu'on a alloué, et que l'OS vous fait une immense faveur en libérant cette mémoire pour vous, une pensée à méditer : quand vous faites une allocation, c'est l'OS qui vous alloue la mémoire.
Humm le mieux si tu veux coder proprement.
Vérifie tes valeurs de retour d'une fonction, elle te renvoie une erreur, retourne jusqu'à ton main() en libérant toute ta mémoire.
matafan ce n'est pas salle mais une mauvaise habitude qu'il ne faut pas prendre, mieux vaut avoir ce réflexe de libérer la mémoire.
Partager