副函數 Stack Overflow問題 |
答題得分者是:Royce520
|
bio
一般會員 發表:42 回覆:36 積分:20 註冊:2003-03-05 發送簡訊給我 |
大家好
請問大家一個問題
以下是程式內容
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void mask()
{
int x[640][480];
}
//-----------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
mask();
}
//---------------------------------------------------------------------------
但是complier後出現
project.exe raised exception class EStackOverflow with message 'Stack overflow'
我猜是陣列大小問題 不知道副函數是否無法令到這麼大
因為480改成400就可
而又不想將X[][]另成全域變數
所以不知道大家可否解決我的疑問呢????
謝謝 發表人 - taishyang 於 2003/04/23 20:25:21
|
brant
一般會員 發表:1 回覆:64 積分:23 註冊:2003-04-07 發送簡訊給我 |
bio 您好,
local 變數過大,可改用動態配置的方式解決。
請參考
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28649 發表人 - brant 於 2003/04/23 18:26:31
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
bio 你好,
的確 這是 mask 函數裡面 局部變數所佔用的記憶體超過 BCB 所限定的 stack 大小, 也就是 int x[640][480]; 這行指令所需記憶體為 4*640*480
, 而 BCB 預設的 stack 大小為 16*100000, 理論上呢 沒有超過, 不過確會造成問題, 解法有好幾種:
第一, 如 brant 所言
第二, 加大 BCB 預設的 stack 大小. (在 Project->Options->[Linker tab]下的 PE file options 之 max stack size)
第三, 宣告成 static int x[640][480]; 也可以 這樣不算全域變數
*真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩ |
bio
一般會員 發表:42 回覆:36 積分:20 註冊:2003-03-05 發送簡訊給我 |
|
brant
一般會員 發表:1 回覆:64 積分:23 註冊:2003-04-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |