你的鏈表 是用 TList的麼... 如果是的 這樣for n := 0 to yourList.Count - 1 do begin Dispose(yourList[n]); end;yourList.Free;即: 如果節點裡面保存的是指針 且指向自己創建的內存,就需要遍歷釋放所有 然後釋放自己 就ok
type point=^node node=record data:integer; next:point; end; var p,q,r:point; new(q);r:=q;p:=q; while .. do begin q^.data:=23; new(q); r.next:=q; r:=q; end; 就是这么简单的链表,创建完后我也知道如何访问和遍历,但是如何释放它呢?如果用完后不理它会出现致命错误吗?
procedure TForm1.Button1Click(Sender: TObject); var p,q,r: point; n: Integer; begin new(p); p.data := -1; r := p; // first;
for n := 0 to 4 do begin new(q); q.data := n; p.next := q; p := p.next; end; p.next := nil; while r.next <> nil do begin ShowMessage(IntToStr(r.data)); q := r; r := r.next; Dispose(q); end; ShowMessage(IntToStr(r.data)); Dispose(r); end;上面是 釋放 不釋放 會有內存洩漏。
你的鏈表 是用 TList的麼... 如果是的 這樣for n := 0 to yourList.Count - 1 do begin Dispose(yourList[n]);//错误Dispose(yourList.Items[n]); end;yourList.Free;即: 如果節點裡面保存的是指針 且指向自己創建的內存,就需要遍歷釋放所有 然後釋放自己 就ok
hehe TO: zhongxd(小禹)Dispose(yourList[n]);// 這樣也是可以的 因為TList是由數組實現的 所以支持隨機存取 :-)tested by myself o
如果是的 這樣for n := 0 to yourList.Count - 1 do
begin
Dispose(yourList[n]);
end;yourList.Free;即: 如果節點裡面保存的是指針 且指向自己創建的內存,就需要遍歷釋放所有 然後釋放自己 就ok
point=^node
node=record
data:integer;
next:point;
end;
var
p,q,r:point;
new(q);r:=q;p:=q;
while .. do
begin
q^.data:=23;
new(q);
r.next:=q;
r:=q;
end;
就是这么简单的链表,创建完后我也知道如何访问和遍历,但是如何释放它呢?如果用完后不理它会出现致命错误吗?
var
p,q,r: point;
n: Integer;
begin
new(p);
p.data := -1;
r := p; // first;
for n := 0 to 4 do
begin
new(q);
q.data := n;
p.next := q;
p := p.next;
end;
p.next := nil; while r.next <> nil do
begin
ShowMessage(IntToStr(r.data));
q := r;
r := r.next;
Dispose(q);
end;
ShowMessage(IntToStr(r.data));
Dispose(r);
end;上面是 釋放 不釋放 會有內存洩漏。
你的鏈表 是用 TList的麼...
如果是的 這樣for n := 0 to yourList.Count - 1 do
begin
Dispose(yourList[n]);//错误Dispose(yourList.Items[n]);
end;yourList.Free;即: 如果節點裡面保存的是指針 且指向自己創建的內存,就需要遍歷釋放所有 然後釋放自己 就ok
這樣也是可以的 因為TList是由數組實現的 所以支持隨機存取 :-)tested by myself o