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

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

Marsh Posté le 05-05-2002 à 23:27:35    

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".

Reply

Marsh Posté le 05-05-2002 à 23:27:35   

Reply

Marsh Posté le 05-05-2002 à 23:41:54    

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
Reply

Marsh Posté le 06-05-2002 à 00:01:22    

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


---------------
Borland rulez: http://pages.infinit.net/borland
Reply

Marsh Posté le 06-05-2002 à 00:08:39    

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 !

Reply

Marsh Posté le 06-05-2002 à 09:12:20    

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

Reply

Marsh Posté le 06-05-2002 à 09:22:06    

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().

Reply

Marsh Posté le 06-05-2002 à 11:11:49    

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

Reply

Marsh Posté le 06-05-2002 à 13:00:36    

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).

Reply

Sujets relatifs:

Leave a Replay

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