BCB 6 Compiler Bug |
尚未結案
|
JasonTsay
一般會員 發表:1 回覆:1 積分:0 註冊:2003-04-16 發送簡訊給我 |
最近在公司寫一個Service,一直有記憶體越吃越多的問題
今天終於找到原因了
有興趣的自己試試
NEW一個新的APPLICATION
加一個按鈕,在按鈕事件寫上
AnsiString temp;
for(int i=0;i<99999;i )
{
temp="123456";
temp=(temp==""?AnsiString("00000000"):AnsiString("FF") temp);
} 寫完後,執行,打開工作管理員
找出你剛剛寫的程式
然後按下按鈕,你會發現,記憶體越吃越多
都不會釋放
如果將?:改成if else 就正常
問題是?:不是ANSI C 就應該可以正常執行了嗎
這算是Compiler 的 Bug吧!
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
arisaka_matsuri
高階會員 發表:25 回覆:205 積分:231 註冊:2003-10-19 發送簡訊給我 |
哈哈哈~真是有趣 我用下列程式碼測試,測試環境
WinXP w/ SP2 + BCB 6 w/SP4, RAM 1.0 GB
#define IF_COND AnsiString temp; for(int i=0;i<100000000;i++) { temp="123456"; #ifndef IF_COND temp=(temp==""?AnsiString("00000000"):AnsiString("FF")+temp); #else if(temp=="") temp=AnsiString("00000000"); else temp=AnsiString("FF")+temp; #endif }結果就如JasonTsay的一樣,用 ? : 跑沒兩下,記憶體全被灌爆 < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=23662187&CC=529193"> 若是改為 if...else,跑到迴圈結束都沒事(記憶體使用量沒有劇烈增加)。 難道真的是compiler bug??我有追過組語,但是時間不多,沒有很清楚 ? : 運算子在呼叫 AnsiString 建構子後,到底有沒有正確的呼叫解構子~ 發表人 - arisaka_matsuri 於 2005/07/25 20:08:16 |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
JasonTsay
一般會員 發表:1 回覆:1 積分:0 註冊:2003-04-16 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
pireer
初階會員 發表:73 回覆:80 積分:30 註冊:2004-12-14 發送簡訊給我 |
的確...用JasonTsay 的方法.工作管理員.處理程式那邊可以看到記憶體增大.
但過幾秒卻不會恢復..平均每按一下增加1.600K左右. 改成andychang1690的這行
temp=(temp==""?AnsiString("00000000"):"FF" temp);
就不會增加了.. 改成IF果真不會增加..
if (temp=="") temp = AnsiString("00000000");
else temp = AnsiString("FF") temp; 還真有趣..是Compiler BUG還是其他問題阿? 發表人 - pireer 於 2005/07/29 16:05:56
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |