Dll中setlength失敗 |
缺席
|
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
有個問題想請教一下, 希望大家不吝指教。
我在使用Dll中, 為了避免用string造成參數在傳送[出/入]Dll時的影響, 因此設定了一個型態.type tbuf=array of widechar 為了結合/分解字串, 也設定了二個函式, 但在短時間大量重覆使用上二函式時, 在設定setlength(a,length('分解字串')); //a: 回傳tbuf字串 時, 在某一時候(長字串時 ,容易發生), 會造成配置失敗或造成不可捕捉的錯誤 不知是否有人知道是怎麼一回事, 請不吝指教, 謝謝 |
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
我也是有碰過,不過我這樣後就解決了,你要不要試試看
setlength(a,0); // 加這一行,先設為 0 setlength(a,length('分解字串')); ===================引 用 sherlockyun 文 章=================== ===================引 用 pprayer 文 章=================== 我也有類似的問題。 如果多次以Setlength 重新定義動態陣列的話 會常出現記憶體的錯誤 我後來都是宣告時就定義好陣列的長度了。 首先多謝您的回覆, 但是, 若是一開始就定義好長度, 我想那就是用固定陣列了 因為在許多的場合, 可能都無法預先掌握陣列的大小, 所以 動態陣列有使用的必要性, 若是在在無法掌握下發生, 容易 造成系統流程的過多考量, 所以一直很困擾。
------
價值的展現,來自於你用哪一個角度來看待它!! |
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
|
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
===================引 用 sherlockyun 文 章=================== ===================引 用 careychen 文 章=================== 我也是有碰過,不過我這樣後就解決了,你要不要試試看 setlength(a,0); // 加這一行,先設為 0 setlength(a,length('分解字串')); 在這裏, 先謝謝你, 我儘快的試試看!! 我讓程式跑了一下, 在執行setlength(a,0)時, 就出問題了 所以可能這方法在某些方面是可行的, 但在我這是不行的 若真的setlength是有這樣的不定時炸彈, 那還真的是很麻煩的一件事@@ |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
方便的話貼一下程式碼吧!
===================引 用 sherlockyun 文 章=================== 有個問題想請教一下, 希望大家不吝指教。 我在使用Dll中, 為了避免用string造成參數在傳送[出/入]Dll時的影響, 因此設定了一個型態.type tbuf=array of widechar 為了結合/分解字串, 也設定了二個函式, 但在短時間大量重覆使用上二函式時, 在設定setlength(a,length('分解字串')); //a: 回傳tbuf字串 時, 在某一時候(長字串時 ,容易發生), 會造成配置失敗或造成不可捕捉的錯誤 不知是否有人知道是怎麼一回事, 請不吝指教, 謝謝 |
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
|
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
|
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
===================引 用 careychen 文 章=================== 建議你是否方便的話如 syntax 大所說的貼一下程式碼,也好方便幫你看看哪出問題了 type TBuf:Array of widechar; function disString(strBind:widestring):TBuf; var i:integer; temp:TBuf; begin setlength(temp,length(strBind)); for i := 0 to length(strBind)-1 do begin temp[i]:=strBind[i 1]; end; result:=temp; end; 只是小小的一個重覆呼叫函式, 在發生問題前, 是正常運作的, 但程式跑大量資料之後, 則容易出現在設定動態陣列時, 出現 無法配置記憶體的現象, 理論上, 函式應是獨立的記憶體區塊 , 我想不通為何有此一現象出現 我查過一些資料, 但對於此問題的說法很少, 而且也有其他有 遇到相同的問題, 所以在此請教 |
sherlockyun
一般會員 發表:3 回覆:7 積分:2 註冊:2004-10-21 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |