看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
james732:http://pastie.org/2506690 09/09 12:49
WhisperGhost:感謝 09/09 16:42