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

Dll中setlength失敗

缺席
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-18 09:55:05 IP:60.244.xxx.xxx 訂閱
有個問題想請教一下, 希望大家不吝指教。
我在使用Dll中, 為了避免用string造成參數在傳送[出/入]Dll時的影響,
因此設定了一個型態.type tbuf=array of widechar
為了結合/分解字串, 也設定了二個函式,
但在短時間大量重覆使用上二函式時,
在設定setlength(a,length('分解字串')); //a: 回傳tbuf字串
時, 在某一時候(長字串時 ,容易發生), 會造成配置失敗或造成不可捕捉的錯誤

不知是否有人知道是怎麼一回事, 請不吝指教, 謝謝
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-01 14:33:40 IP:61.63.xxx.xxx 訂閱
我也有類似的問題。

如果多次以Setlength 重新定義動態陣列的話
會常出現記憶體的錯誤
我後來都是宣告時就定義好陣列的長度了。
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-01 16:54:51 IP:60.244.xxx.xxx 訂閱

===================引 用 pprayer 文 章===================
我也有類似的問題。

如果多次以Setlength 重新定義動態陣列的話
會常出現記憶體的錯誤
我後來都是宣告時就定義好陣列的長度了。


首先多謝您的回覆,
但是, 若是一開始就定義好長度, 我想那就是用固定陣列了
因為在許多的場合, 可能都無法預先掌握陣列的大小, 所以
動態陣列有使用的必要性, 若是在在無法掌握下發生, 容易
造成系統流程的過多考量, 所以一直很困擾。
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-01 17:21:50 IP:218.210.xxx.xxx 訂閱
我也是有碰過,不過我這樣後就解決了,你要不要試試看 

setlength(a,0); // 加這一行,先設為 0
setlength(a,length('分解字串'));

===================引 用 sherlockyun 文 章===================

===================引 用 pprayer 文 章===================
我也有類似的問題。

如果多次以Setlength 重新定義動態陣列的話
會常出現記憶體的錯誤
我後來都是宣告時就定義好陣列的長度了。


首先多謝您的回覆,
但是, 若是一開始就定義好長度, 我想那就是用固定陣列了
因為在許多的場合, 可能都無法預先掌握陣列的大小, 所以
動態陣列有使用的必要性, 若是在在無法掌握下發生, 容易
造成系統流程的過多考量, 所以一直很困擾。
------
價值的展現,來自於你用哪一個角度來看待它!!
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-01 17:33:20 IP:59.124.xxx.xxx 訂閱

===================引 用 careychen 文 章===================
我也是有碰過,不過我這樣後就解決了,你要不要試試看

setlength(a,0); // 加這一行,先設為 0
setlength(a,length('分解字串'));

在這裏, 先謝謝你, 我儘快的試試看!!
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-01 17:48:53 IP:59.124.xxx.xxx 訂閱

===================引 用 sherlockyun 文 章===================

===================引 用 careychen 文 章===================
我也是有碰過,不過我這樣後就解決了,你要不要試試看

setlength(a,0); // 加這一行,先設為 0
setlength(a,length('分解字串'));

在這裏, 先謝謝你, 我儘快的試試看!!

我讓程式跑了一下, 在執行setlength(a,0)時, 就出問題了
所以可能這方法在某些方面是可行的, 但在我這是不行的
若真的setlength是有這樣的不定時炸彈, 那還真的是很麻煩的一件事@@
syntax
尊榮會員


發表:26
回覆:1139
積分:1258
註冊:2002-04-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-06 09:18:14 IP:118.231.xxx.xxx 訂閱
方便的話貼一下程式碼吧!
===================引 用 sherlockyun 文 章===================
有個問題想請教一下, 希望大家不吝指教。
我在使用Dll中, 為了避免用string造成參數在傳送[出/入]Dll時的影響,
因此設定了一個型態.type tbuf=array of widechar
為了結合/分解字串, 也設定了二個函式,
但在短時間大量重覆使用上二函式時,
在設定setlength(a,length('分解字串')); //a: 回傳tbuf字串
時, 在某一時候(長字串時 ,容易發生), 會造成配置失敗或造成不可捕捉的錯誤

不知是否有人知道是怎麼一回事, 請不吝指教, 謝謝
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-10-06 21:31:46 IP:116.24.xxx.xxx 訂閱
是否是在多线程里使用?
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-10-07 09:07:00 IP:60.244.xxx.xxx 訂閱

===================引 用 pcplayer99 文 章===================
是否是在多线程里使用?

我沒有啟用多緒執行, 應該只是單緒執行而已
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#10 引用回覆 回覆 發表時間:2008-10-07 09:15:44 IP:218.210.xxx.xxx 訂閱
建議你是否方便的話如  syntax 大所說的貼一下程式碼,也好方便幫你看看哪出問題了
------
價值的展現,來自於你用哪一個角度來看待它!!
sherlockyun
一般會員


發表:3
回覆:7
積分:2
註冊:2004-10-21

發送簡訊給我
#11 引用回覆 回覆 發表時間:2008-10-07 15:11:25 IP:59.124.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2008-11-18 11:30:48 IP:60.244.xxx.xxx 訂閱
看來這問題, 目前尚無解答, 
所以可能只能用更多的檢查機制來執行了,
多謝各位大大的回答, 感激了!!
系統時間:2024-05-06 10:26:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!