free出錯 |
答題得分者是:careychen
|
chhy515
一般會員 發表:3 回覆:9 積分:2 註冊:2008-08-27 發送簡訊給我 |
定義了一個類
TSymbol=class RefDes:String; PackageName:string; insertion_code:byte; SymX,SymY:real; Rotation:real; Sym_layer:string; PinList:TStringList; end; 有一文件,每行數據都對應上面我定義類的每一部分,類中PinList需要另外獲得,下面i是每行行號,SymLst為TStringList變量,為什麽執行到symbol.free會出錯呢?謝謝! tmpstr:=StringReplace(SL.Strings[i],'"','',[rfReplaceAll]); symbol:=TSymbol.Create; Arr:=mysplit(tmpstr,','); symbol.RefDes:=Arr[1]; symbol.PackageName:=Arr[3]; symbol.insertion_code:=9; symbol.SymX:=tomil(strtoint(Arr[4]),xTimes); symbol.SymY:=tomil(strtoint(Arr[5]),xTimes); symbol.Rotation:=tomil(strtoint(Arr[6]),10); symbol.Sym_layer:=copy(Arr[7],1,1); symbol.PinList:=nil; SymLst.AddObject(Arr[0],symbol); symbol.Free;//有這句會出錯 symbol:=nil; |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
SymLst.AddObject(Arr[0],symbol); ---> ????
symbol.Free;//有這句會出錯 既然要 free ,由何必 assign 給 SymLst ? 如果是要保留(assign 給 SymLst),又如何做可以 free ? 兩者,你只能選一個 不然改成這樣 SymLst.AddObject(Arr[0],symbol); SymLst.RemoveObject(Arr[0],symbol) ; symbol.Free; 但這種 code ,有意義嗎? ===================引 用 chhy515 文 章=================== 定義了一個類 TSymbol=class RefDes:String; PackageName:string; insertion_code:byte; SymX,SymY:real; Rotation:real; Sym_layer:string; PinList:TStringList; end; 有一文件,每行數據都對應上面我定義類的每一部分,類中PinList需要另外獲得,下面i是每行行號,SymLst為TStringList變量,為什麽執行到symbol.free會出錯呢?謝謝! tmpstr:=StringReplace(SL.Strings[i],'"','',[rfReplaceAll]); symbol:=TSymbol.Create; Arr:=mysplit(tmpstr,','); symbol.RefDes:=Arr[1]; symbol.PackageName:=Arr[3]; symbol.insertion_code:=9; symbol.SymX:=tomil(strtoint(Arr[4]),xTimes); symbol.SymY:=tomil(strtoint(Arr[5]),xTimes); symbol.Rotation:=tomil(strtoint(Arr[6]),10); symbol.Sym_layer:=copy(Arr[7],1,1); symbol.PinList:=nil; SymLst.AddObject(Arr[0],symbol); symbol.Free;//有這句會出錯 symbol:=nil; |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
嗯~~~,看了程式碼覺得沒有錯,測了程式碼也沒有錯,所以你有錯的地方就是在你沒貼出來的地方
你再檢查一下試試看 ===================引 用 chhy515 文 章=================== 定義了一個類 TSymbol=class RefDes:String; PackageName:string; insertion_code:byte; SymX,SymY:real; Rotation:real; Sym_layer:string; PinList:TStringList; end; 有一文件,每行數據都對應上面我定義類的每一部分,類中PinList需要另外獲得,下面i是每行行號,SymLst為TStringList變量,為什麽執行到symbol.free會出錯呢?謝謝! tmpstr:=StringReplace(SL.Strings[i],'"','',[rfReplaceAll]); symbol:=TSymbol.Create; Arr:=mysplit(tmpstr,','); symbol.RefDes:=Arr[1]; symbol.PackageName:=Arr[3]; symbol.insertion_code:=9; symbol.SymX:=tomil(strtoint(Arr[4]),xTimes); symbol.SymY:=tomil(strtoint(Arr[5]),xTimes); symbol.Rotation:=tomil(strtoint(Arr[6]),10); symbol.Sym_layer:=copy(Arr[7],1,1); symbol.PinList:=nil; SymLst.AddObject(Arr[0],symbol); symbol.Free;//有這句會出錯 symbol:=nil;
------
價值的展現,來自於你用哪一個角度來看待它!! |
chhy515
一般會員 發表:3 回覆:9 積分:2 註冊:2008-08-27 發送簡訊給我 |
|
chhy515
一般會員 發表:3 回覆:9 積分:2 註冊:2008-08-27 發送簡訊給我 |
|
chhy515
一般會員 發表:3 回覆:9 積分:2 註冊:2008-08-27 發送簡訊給我 |
好像發現了,不過不明白呢!!
如果我加入FreeAndNil(symbol),那么到下面的Pin.RefDes:=GetSym.RefDes就會出錯,去了那句就不會有問題!! TPin=class Pin_Number:string; PinX,PinY:real; NetName:string; RefDes:string; Pin_Layer:string; TestPoint:char; end; GetSym:TSymbol; GetSym:=TSymbol(SymLst.Objects[SymLst.IndexOf(Arr2[0])]); Pin:=TPin.Create; Pin.RefDes:=GetSym.RefDes;//到這裡出錯 |
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
你的第二個問題,就是上面 syntax 回你的,
1、在你一開始的程式碼中 symbol:=TSymbol.Create; // 這時候 Create 了一個 物件在這邊,請注意這是指 symbol 指標指到一個物件 2、在下面一點點的地方 SymLst.AddObject(Arr[0],symbol); // 這個是第二個指標指向同一個物件 3、但再來的 symbol.Free; // 這是那個物件被你 Free 掉了 symbol:=nil; // 而指標也清掉了 4、所以雖然第二點中的指標還指向那個物件,但那個物件【已經消滅了】,所以你別的地方再引用時會出錯 所以你這種寫法,可以在程式啟動時, Create SymList 而程式要關閉,或是 Form 要關閉前,才會掃描 SymList 中是否有殘留的物件,有的話,一次 Free ===================引 用 chhy515 文 章=================== 好像發現了,不過不明白呢!! 如果我加入FreeAndNil(symbol),那么到下面的Pin.RefDes:=GetSym.RefDes就會出錯,去了那句就不會有問題!! TPin=class Pin_Number:string; PinX,PinY:real; NetName:string; RefDes:string; Pin_Layer:string; TestPoint:char; end; GetSym:TSymbol; GetSym:=TSymbol(SymLst.Objects[SymLst.IndexOf(Arr2[0])]); Pin:=TPin.Create; Pin.RefDes:=GetSym.RefDes;//到這裡出錯
------
價值的展現,來自於你用哪一個角度來看待它!! |
chhy515
一般會員 發表:3 回覆:9 積分:2 註冊:2008-08-27 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |