作者WhisperGhost (oops)
看板C_and_CPP
標題[問題] class中宣告變數陣列大小是否有限制?
時間Fri Sep 9 09:28:25 2011
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++ 2008 Express
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
我在Class設了三個陣列變數,然後對她做歸零的動作,可是在處理最後
一個陣列 arrayC 就直接掛掉,try抓不到問題,也沒有停留在Debug模式
程式直接跳掉,輸出部分會顯示這類訊息:
'Win32 執行緒' (0xe88) 執行緒以返回碼 0 (0x0) 結束。
於 0x6cb216f1 (ImageLine.dll) 的 A001.exe 中第一個可能發生的
例外狀況: 0xC0000005: 寫入位置 0x00301000 時發生存取違規
不曉得我這樣的作法是有什麼樣的問題?
謝謝
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
Class A
{
A(int i = 0):i(i){};
void DOIT();
void Zero(double tmp[]);
private:
int i;
double arrayA[5000];
double arrayB[5000];
double arrayC[5000];
};
void A::Zero(double tmp[])
{
for(int i = 0; i < End; i++)
tmp[i] = 0.0;
}
void A::DOIT()
{
Zero(arrayA);
Zero(arrayB);
try
{
Zero(arrayC);
} catch(...){//....}
}
void main()
{
A tmp;
tmp.DOIT();
}
補充說明(Supplement):
後來我有測試把陣列大小設小就可以,或者把陣列拉出class外也是正常。
還有改變arrayA, arrayB, arrayC 宣告位置,而固定出問題的變數
都是最後一個宣告位置。
所以想說是不是有限制member variable的數量,還是說改成用
pointer new的方式會比較保險呢?
還有突然想到我宣告A class的方式是不是有問題?
若用 A tmp;
我發現在Constructor中new出來的member pointer variable的位址會不固定。
改用 A* tmp;
他的位址則會固定。
不曉得問題是不是出在這個地方,因為第一次寫class有些觀念很亂。
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.125.123.88
→ shadow0326:印象中區域變數太肥的error msg應該是stack overflow 09/09 10:06
→ shadow0326:話說回來,這個程式碼不是完整的吧@@ 09/09 10:07
※ 編輯: WhisperGhost 來自: 59.125.123.88 (09/09 11:12)
→ WhisperGhost:感謝 09/09 16:42