Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1389 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] free ou pas avant de quitter?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] free ou pas avant de quitter?

n°1196379
mart
Posté le 10-09-2005 à 07:32:07  profilanswer
 

Hello
 
Dans un programme C si je détecte une  erreur qui provoquera l'arret du programme est il indispensable/préférable/complètement inutile de libérer la mémoire allouer avec les malloc?
 
Merci.
 

mood
Publicité
Posté le 10-09-2005 à 07:32:07  profilanswer
 

n°1196385
olivthill
Posté le 10-09-2005 à 08:44:05  profilanswer
 

Avec quel système d'exploitation ? Windows ? Unix ? DOS ? et quelle version de ces systèmes ?
 
Il y a quatre groupes de Windows :
 
A. Windows 3, 3.1
B. Windows 95, 98, 98 SE, Me
C. Windows NT, 2000, 2003, XP, Vista
D. Windows CE
 
Chacun à une stratégie d'allocation et de libération mémoire différente.
 
S'il n'y a pas de plantage, s'il n'y a pas de mémoire vérouillée, si le programme sort proprement, alors tous ces Windows libérent d'eux-même la mémoire allouée (DOS aussi).
La situation est différente en cas de plantage. Seuls les Windows du groupe C sont capable de libérer leur mémoire (sauf si elle est vérouillée).
 
D'une manière générale, il est recommandé de libérer la mémoire allouée.
 
Attention, une erreur de débutant très fréquente consiste à libérer plusieurs fois le même espace de mémoire. Cela fait planter l'application. L'erreur se produit souvent quand le programmeur se croit tranquile car avant de libérer la mémoire, il teste si le pointeur est nul ou non, mais il ne sait pas ou ne fait pas attention au fait que l'instruction free() ne remet pas le pointeur à nul, d'où d'autres libérations plus tard, qui, elles, plantent.

n°1196394
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-09-2005 à 09:48:23  profilanswer
 

mart a écrit :

Dans un programme C si je détecte une  erreur qui provoquera l'arret du programme est il indispensable/préférable/complètement inutile de libérer la mémoire allouer avec les malloc?


Le langage C garanti que lorsqu'on quitte un programme 'normalement', c'est à dire avec le return de main() ou exit(), la mémoire est rendue au sytème et les fichiers sont fermés. Cette garantie ne s'applique pas aux sorties 'brutales' comme par abort() qui est appelée par la macro assert() en cas d'erreur.
 
J'ai constaté que sous DOS/Windows avec Borland C 3.1, ce genre de sortie brutale finissait par planter Borland C (impossibilité de compiler, plus de mémoire), voire la machine entière. Depuis, et parce que j'utilise beaucoup assert(), notamment en phase de mise au point, j'ai défini mon propre ASSERT()[1] qui fait une sortie 'propre' par exit().
 
A noter que atexit() permet d'installer une fonction 'utilisateur' qui sera appelée par exit(). Cette fonction peut effectuer des actions 'sanitaires' avant de sortir. (Je m'en sers pour afficher l'état de mon gestionnaire de mémoire[2] et appeler system("pause" ) quand j'utilise Dev-cpp)
 
----------------------------
[1] http://mapage.noos.fr/emdel/clib.htm
Module 'poubelle' SYS
 
[2] http://mapage.noos.fr/emdel/clib.htm
Module SYSALLOC


Message édité par Emmanuel Delahaye le 10-09-2005 à 16:52:24

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1196397
mart
Posté le 10-09-2005 à 09:51:52  profilanswer
 

oki, dans mon cas, c'est du exit() et du return du main! merci à vous deux et merci manu pr la réponse a la question qui venait, à savoir les fichiers. Cool!

n°1196399
mart
Posté le 10-09-2005 à 09:54:42  profilanswer
 

(sinon, le soft m'a été demandé "portable", la je code sur linux/gcc4/x86, avec un eventuel check sur macosX/gcc3.3/ppc, mais je sais pas sur quoi il tournera. le programme ne devra pas planter (tiens donc) et meme là, ben je vois mal comment lui dire liberer la mémoire. Pour le dble free, oui je sais (j'ai remarqué :)).

n°1196403
Emmanuel D​elahaye
C is a sharp tool
Posté le 10-09-2005 à 10:01:20  profilanswer
 

mart a écrit :

(sinon, le soft m'a été demandé "portable", la je code sur linux/gcc4/x86, avec un eventuel check sur macosX/gcc3.3/ppc, mais je sais pas sur quoi il tournera. le programme ne devra pas planter (tiens donc) et meme là, ben je vois mal comment lui dire liberer la mémoire. Pour le dble free, oui je sais (j'ai remarqué :)).


Quelle est ta question précise ?
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1196556
mart
Posté le 10-09-2005 à 15:42:00  profilanswer
 

ben vs me dite qq tt est libéré en quittant normalement, mais je ds le cas inverrse  vois paas comment ancticiper un plantage. Ma question  concernait une erreur mais pas au nivo programmation mais au niveau mauvais usage du sofg (c'est moi qui la définie l'erreur et c'est moi qui exit());


Message édité par mart le 10-09-2005 à 15:42:25
n°1197151
matafan
Posté le 11-09-2005 à 17:13:47  profilanswer
 

T'inquiète, sur tous les OS bien foutus (et tu es apparemment sur un OS bien foutu), tout est libéré quand ton programme termine. Que ce soit par un exit, par un SIGSEGV ou autre.
 
Edit : enfin quand je dis tout, je parle de la mémoire allouée par malloc et des fichiers ouverts. Si tu utilise de la mémoire partagée, elle n'est pas forcément libérée.


Message édité par matafan le 11-09-2005 à 17:15:32
n°1197355
0x90
Posté le 12-09-2005 à 08:51:46  profilanswer
 

( De toute facon on s'en branlefiche, une fois le logiciel fermé, l'user pourra pas deviner que c'est notre faute si son OS rame et qu'il est obligé de rebooter tout les2jours :ange: )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197357
plainsofpa​in
Pingouino's lover
Posté le 12-09-2005 à 08:55:45  profilanswer
 

Et puis, windows rame déjà bien assez tout seul  :whistle:


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
mood
Publicité
Posté le 12-09-2005 à 08:55:45  profilanswer
 

n°1199264
mart
Posté le 14-09-2005 à 12:24:34  profilanswer
 

Perso je programme le machin sous linux mais je sais pas où il va tourner par la suite. Multi plate forme.

n°1199509
matafan
Posté le 14-09-2005 à 17:03:50  profilanswer
 

De toute facon, en C, et si ton programme fait plus de quelques milliers de lignes, il est absolument impossible de liberer explicitement tout ce qui a ete alloue en cas de terminaison anormale. Laisse l'OS le faire. Ca enlevera de la complexite inutile dans ton programme.

n°1200356
mart
Posté le 15-09-2005 à 13:48:58  profilanswer
 

on est d'accord...merci..


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] free ou pas avant de quitter?

 

Sujets relatifs
Erreurs chez Free [Résolu]htaccess et free ça colle pas? [réglé]
Wml et PHP sur Free ?Problème BDD MySQL chez Free
PhpMyAdmin et Freenom de domaine .free.fr
Comment transférer mes fichier sur un compte web free ?[php] chez free pb de sessions
Petite question pour utiliser l'hébergement free.fr?Problème avec des Variables de Session sous Free
Plus de sujets relatifs à : [C] free ou pas avant de quitter?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR