To ile pamięci wycieka, można łatwo wywnioskować z prostych obliczeń – new
używane jest 3x
(dwa na początku i jedno na końcu), a delete
tylko raz, więc 3 - 1 = 2
. ;)
Nie macie jakiegoś konkretnego narzędzia do śledzenia operacji na pamięci i detekcji wycieków? Na pewno macie, wystarczy użyć i nie zastanawiać się niepotrzebnie. Przeportowałem kod pod FPC:
var
X: Integer;
Y, Z: PInteger;
begin
X := 3; New(Y); New(Z);
Y := @X;
Z^ := X;
New(Y);
Dispose(Y);
end.
i z modułem HeapTrc
wypluwa taki wynik:
Heap dump by heaptrc unit
3 memory blocks allocated : 12/24
1 memory blocks freed : 4/8
2 unfreed memory blocks : 8
True heap size : 65536 (128 used in System startup)
True free heap : 65248
Should be : 65264
Call trace for block $0005F168 size 4
Call trace for block $0005F118 size 4
Wynik – 2 unfreed memory blocks : 8
.