Pointeurs, gestion de la memoire (Pascal)

Pointeurs, gestion de la memoire (Pascal) - Delphi/Pascal - Programmation

Marsh Posté le 08-03-2006 à 11:15:10    

Voila un petit programme :
 
var ptr1,ptr2:^integer;
begin
   new(ptr1);
   ptr1^:=10
   new(ptr2);
   ptr2^:=20       {20 est donc mis en memoire à l'adresse pointé par ptr2}  
   ptr2:=ptr1;      
end;
 
 
Lorsque l'on fait   < ptr2:=ptr1; >   ptr2 ne pointe alors plus sur la case memoire qui contenait 20, cette case memoire est-elle libérée de la mémoire (considérée comme libre) ?
 
Merci de votre réponse !
 

Reply

Marsh Posté le 08-03-2006 à 11:15:10   

Reply

Marsh Posté le 08-03-2006 à 11:24:18    

Non, sauf si ton compilateur implémente un ramasse miette(normalement pas le cas).
 
En tout état de cause, l'intruction "ptr2:=ptr1;" ne libère pas et ne doit pas libérer automatiquement ptr2. En effet, considère le code suivant :
 

var ptr1,ptr2,ptr3:^integer;  
begin  
   new(ptr2);  
   ptr2^:=20       {20 est donc mis en memoire à l'adresse pointé par ptr2}  
   ptr3 := ptr2;
   ptr2:=ptr1;        
end;


 
Dans ce cas, la case mèmoire qui contenanit 20 ne doit surtout pas être libéré puisque ptr3 pointe toujours dessus.


Message édité par Zozol le 08-03-2006 à 11:25:14
Reply

Marsh Posté le 08-03-2006 à 11:33:06    

Ok, ca parrait évident avec un bon exemple. Merci !

Reply

Sujets relatifs:

Leave a Replay

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