全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1389
推到 Plurk!
推到 Facebook!

問如何釋放變量的記憶體空間呢?

尚未結案
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-19 00:01:25 IP:202.175.xxx.xxx 未訂閱
各位高人: 我有一問題請教大家,以下是我寫的一段CODE的宣告, 問如何釋放這些變量的記憶體空間呢? Const n =1; e =1; Len =15; var k : byte; r,s : array [0..Len] of SmallInt; i,j : ShortInt; SABM,TM, M : string; a, b, mm, cp : array of array of smallint; 請指點 平常心活著
------
平常心活著
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-19 02:53:39 IP:61.67.xxx.xxx 未訂閱
jl您好.. 您可使用freeandnil(變數)來釋放並設成空值..(連變數所在的指標都清除) 如: freeandnil(mm) freeandnil(r) freeandnil(s)    均可..good luck
mustapha.wang
資深會員


發表:89
回覆:409
積分:274
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-19 15:27:55 IP:218.80.xxx.xxx 未訂閱
这样释放不行吧?
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
会访问到无效地址的。 这些局部变量,delphi自动在栈中分配、释放。 久病成良医--多试 千人之诺诺,不如一士之谔谔--兼听
------
江上何人初见月,江月何年初照人
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-19 17:19:57 IP:219.68.xxx.xxx 未訂閱
對不起..我說錯了..FREEANDNIL是針對物件..    如果是靜態變數或靜態陣列..一定要由系統釋放
如
   k : byte; 
   r,s : array [0..Len] of SmallInt; 
   i,j : ShortInt; 
   SABM,TM, M : string; 
以上都是屬於靜態變數
若寫在函式裡..會隨著函式結束而釋放..
若寫在全域..則要等到程式結束才能釋放..無法由我們手動釋放    但如果是動態變數或動態陣列..則要手動釋放
如您的 a, b, mm, cp : array of array of smallint; 
我寫了一個SAMPLE..您可以打開工作管理員..看看記憶體的變化..    procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
   setlength(a,9999,9999);
   for i:=0 to 9998 do
      for j:=0 to 9998 do
         a[i][j]:=0;
end;    procedure TForm1.Button2Click(Sender: TObject);
var
df:pointer;
begin
   a:=nil; //釋放a陣列的記憶體
end;
GOOD LUCK
jl
一般會員


發表:17
回覆:34
積分:10
註冊:2004-02-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-04-19 18:34:08 IP:202.175.xxx.xxx 未訂閱
謝謝兩位的解答 JL 平常心活著
------
平常心活著
系統時間:2024-07-05 4:56:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!