今まで正常に動作していたプログラムに突然バグが起こり、困っております。
使用しているのはVisual C++ 2008 EEです。
少し長くなりますが、ご容赦ください。
まず、バグが起こる直前に行った操作です。
GameBaseというクラスにメンバとしてbool hoge[200]を追加。
GameBaseのコンストラクタを用いて
int i; for( i = 0; i < 200; i++ ) hoge = false;
と初期化。
以上です。この際、初期化部分をコメントアウトすると、エラーがなくなります。
次に、エラーが起こった場所です。
void Chara::setName( char *pName ) { size_t size; if( pName == NULL ) return; if( m_pName ) { delete m_pName; m_pName = NULL; } size = strlen( pName )+1; > m_pName = new char[ size ]; if( m_pName == NULL ) return; strcpy_s( m_pName, size, pName ); }
どうやら、メモリ確保に失敗するようで、std::bad_allocが返ってきています。
setName関数をコメントアウトして飛ばしてみると、次のnewで同じエラーが出ました。
空きメモリは約620MBありますが、これでは足りないのでしょうか。
そして、これがエラーを起こした場所の出力です。
***.exe の 0x7c95ab8e で初回の例外が発生しました: 0xC0000005: 場所 0x00000000 を読み込み中にアクセス違反が発生しました。 ***.exe の 0x7c812a6b で初回の例外が発生しました: Microsoft C++ の例外: std::bad_alloc (メモリの場所 0x0012fb08)。 ***.exe の 0x7c812a6b でハンドルされていない例外が発生しました: Microsoft C++ の例外: std::bad_alloc (メモリの場所 0x0012fb08)。
最後に、呼び出し履歴です。
kernel32.dll!7c812a6b() [下のフレームは間違っているか、または見つかりません。kernel32.dll に対して読み込まれたシンボルはありません。] kernel32.dll!7c812a6b() ***.exe!_CxxThrowException(void * pExceptionObject=0x0012fb08, const _s__ThrowInfo * pThrowInfo=0x0082a9e8) 行 161 C++ ***.exe!operator new(unsigned int size=7) 行 64 C++ ***.exe!operator new[/url](unsigned int count=7) 行 7 + 0x9 バイト C++ > ***.exe!Chara::setName(char * pName=0x0080139c) 行 50 + 0x9 バイト C++ ***.exe!GameBase::init() 行 57 C++ ***.exe!Game::run() 行 17 C++ ***.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00151f46, int nCmdShow=1) 行 28 + 0x8 バイト C++ ***.exe!__tmainCRTStartup() 行 263 + 0x2c バイト C ***.exe!WinMainCRTStartup() 行 182 C kernel32.dll!7c816fe7()
新しく加えた場所に問題があるように思えません。
原因として考えられる箇所を教えて頂けると幸いです。
どうか宜しくお願い致します。