[問題] class中宣告變數陣列大小是否有限制?
看板C_and_CPP (C/C++)作者WhisperGhost (oops)時間14年前 (2011/09/09 09:28)推噓0(0推 0噓 4→)留言4則, 3人參與討論串1/2 (看更多)
開發平台(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
→
09/09 10:06, , 1F
09/09 10:06, 1F
→
09/09 10:07, , 2F
09/09 10:07, 2F
※ 編輯: WhisperGhost 來自: 59.125.123.88 (09/09 11:12)
→
09/09 12:49, , 3F
09/09 12:49, 3F
→
09/09 16:42, , 4F
09/09 16:42, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章