[C] Pkoi mes fonctions prennent tant de place en mémoire?

Pkoi mes fonctions prennent tant de place en mémoire? [C] - C - Programmation

Marsh Posté le 21-05-2004 à 22:23:15    

Bonjour !  
J'ai un problème avec une utilisation mémoire trop importante.
 
J'appelle en boucle des fonctions dans lesquelles sont déclarées quelques variables, comme ceci:

Code :
  1. int i,j,k ...
  2. char **tab


 
Le tab est créé dynamiquement à chaque passage dans la fonction et à la sortie je fais un "free(tab)" donc en théorie il est supprimé de la mémoire à la sortie.
 
Néenmoins en ce qui concerne les autres int... est-ce qu'ils sont supprimé à la fin du passage dans la fonction ou pas? Paske l'occupation mémoire ne s'arrête jamais de monter quand les fonctions tournent ! Je voudrais que ces fonctions puissent tourner en boucle avec une occupation mémoire constante ! Eclairez moi svp je ne comprends pas...

Reply

Marsh Posté le 21-05-2004 à 22:23:15   

Reply

Marsh Posté le 21-05-2004 à 22:30:33    

10 francs et mon pantalon que tu ne libére pas ton char** ...

Reply

Marsh Posté le 21-05-2004 à 22:33:55    

Joel F a écrit :

10 francs et mon pantalon que tu ne libére pas ton char** ...


 [:meganne]

Reply

Marsh Posté le 21-05-2004 à 22:37:26    

free(tab) ca libére que UN pointeur de ton char**.
 
faut faire une boucle qui libéres tous les char* des ton tab PUIS libérer ton tab

Reply

Marsh Posté le 21-05-2004 à 22:45:19    

Joel F -> C'est bon tu peux garder tes 10 francs et ton pantalon, c'est effectivement le free(tab[i]) que javais oublié. J'avais toujours cru qu'un free(tab) suffisait pour tout enlever :) Merci bcp !

Reply

Marsh Posté le 21-05-2004 à 22:46:18    

Encore une victoire de Joel \o/

Reply

Marsh Posté le 22-05-2004 à 00:21:20    

Pour completer l'explication, tes "int" sont virés de la mémoire puisque ce sont des variables locales et donc qu'elles sont logées dans la pile. Lors de la sortie de la fonction, le pointeur de pile est décrementé, donc tes variables n'existent plus.
Pour tout comprendre, empruntes un bon bouquin de C, tout devrait y être expliqué!

Reply

Marsh Posté le 22-05-2004 à 00:22:59    

*LighTninG* a écrit :

J'avais toujours cru qu'un free(tab) suffisait pour tout enlever :)

la programmation est un truc magique, plein de croyances et de mythes

Reply

Marsh Posté le 22-05-2004 à 00:34:11    

c'est le paradigme du VisualBasic...


Message édité par bjone le 22-05-2004 à 00:34:33
Reply

Marsh Posté le 22-05-2004 à 14:36:02    

Taz a écrit :

la programmation est un truc magique, plein de croyances et de mythes


 
c'est si boooo

Reply

Sujets relatifs:

Leave a Replay

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