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

  FORUM HardWare.fr
  Programmation
  C++

  [C/C++] Comment fonctionne la fonction "free" ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C/C++] Comment fonctionne la fonction "free" ?

n°134944
Fraaargh
Powered by Toy Dolls & Catch22
Posté le 05-05-2002 à 23:27:35  profilanswer
 

Je viens de me poser pour la 1ere fois une question qui est qd meme assez importante. Examinez le code suivant:
 
int * monPointeur;
monPointeur = malloc(sizeof(int));
free(monPointeur);
 
apres execution, la valeur de "monPointeur" est NULL. Or, on ne passe a la fonction free qu'une copie de la valeur de "monPointeur"... Comment ce fait-il alors que monPointeur soit directement modifié ???
 
Je me suis rendu compte de ca en voulant (en devant plutot, pour 1 cours !) simuler des fonctions d'allocation/recuperation dynamique de memoire a partir d'un tableau global et en me rendant compte que si ma fonction de libération de la mémoire voulait mettre monPointeur à NULL, j'était obligé d'appeler non pas monfree(monPointeur) mais monfree(&monPointeur) pour pouvoir mettre monPointeur à NULL directement dans ma fonction "monfree".

mood
Publicité
Posté le 05-05-2002 à 23:27:35  profilanswer
 

n°134947
antp
Super Administrateur
Champion des excuses bidons
Posté le 05-05-2002 à 23:41:54  profilanswer
 

Normallement il n'est pas mis à NULL.
Peut-être que le compilateur que tu utilises le fait pour toi, ou qu'en mode debug il le fait.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°134966
os2
Posté le 06-05-2002 à 00:01:22  profilanswer
 

ta une fonction en delphi freeannil...
elle devrait exister en bcb aussi, tu semble utiliser bcb?


---------------
Borland rulez: http://pages.infinit.net/borland
n°134969
Fraaargh
Powered by Toy Dolls & Catch22
Posté le 06-05-2002 à 00:08:39  profilanswer
 

antp a écrit a écrit :

Normallement il n'est pas mis à NULL.
Peut-être que le compilateur que tu utilises le fait pour toi, ou qu'en mode debug il le fait.  




 
Ah ben ouais, tu as raison !!! En fait, j'etais telement persuadé de ce que je disais que je n'ai meme pas testé  :D (spa bien du tout, je sais !)
Mais vraiment, j'en etais P E R S U A D E... fou ! J'ai donc testé et ce que je dis n'a aucun sens et... je passe pour un con !
Conclusion, fô que je fasse gaffe moi, parceque j'en etait tellement sur que j'aurais put baser des programmes entier la dessus avant de me rendre compte que ca marchait pas !

n°135136
Giz_
Posté le 06-05-2002 à 09:12:20  profilanswer
 

Pour conseil: Il ne faut pas utiliser les fonction malloc et free du C mais new et delete du C++ qui est beaucoup plus efficace

n°135138
Carbon_14
Posté le 06-05-2002 à 09:22:06  profilanswer
 

En C, ça m'est déja arrivé de faire un free() deux fois de suite (bugg, maladresse, égarement, ..), et le pointeur n'était pas NULLifié (ce qui m'aurait pourtant rendu service :)).
 
Si on tient à ce qu'il soit NULL, il suffit de l'y mettre juste après le free().

n°135189
chrisbk
-
Posté le 06-05-2002 à 11:11:49  profilanswer
 

ou si on est un peu feneant de se faire une bonne vieille macro des familles :D

n°135243
youdontcar​e
Posté le 06-05-2002 à 13:00:36  profilanswer
 

Giz_ a écrit a écrit :

Pour conseil: Il ne faut pas utiliser les fonction malloc et free du C mais new et delete du C++ qui est beaucoup plus efficace


pour conseil : tourner 7 fois ses yeux devant son compilo avant de parler. NON, ce n'est pas "plus efficace", c'est une manière "différente" d'allouer, vu que les new / delete appellent par ex constructeurs / destructeurs.
 
MAIS en interne c'est souvent kif kif, cf visual studio qui appelle nh_malloc (ou approchant) pour new ET malloc.
 
(tu m'expliqueras comment une alloc mémoire peut être 'plus efficace' qu'une autre, vu que les deux sont similaires donc utilisent certainement le même algo et sont donc sujettes aux mêmes optims et donc peut être à l'utilisation de la même fonction un peu comme le fait vc++ oh c'est dingue ça).


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

  [C/C++] Comment fonctionne la fonction "free" ?

 

Sujets relatifs
[IA] Fonction d'évaluation pour le jeu 'Awale'[PHP-SQL] Problème avec la fonction "time"
Une ch'tite fonction en Delphi SVP ![VBScript]appel d'une fonction depuis un formulaie.
Recherche une fonction en VBSCRIPT (j'ai la source en VB)...[PHP] Afficher differente chose en fonction ...
[php] probleme avec la fonction stripslashes()[PHP] ca existe une fonction ki affiche un calendrier ??
[PHP] - Une fonction pour transformer un temps unix en date et heure.[PHP] variable predefinie $_POST['ma_variable'] et fonction mail()
Plus de sujets relatifs à : [C/C++] Comment fonctionne la fonction "free" ?


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