• 締切済み

Debug.exe実行時にWinMainCRTStartup()でエラーが発生する

WindowsXP VisualC++.net2003 で開発をしています。 VC上で実行すると問題なく実行できるのですが、Debugファイルから実行するとエラーが発生します。 エラーの発生場所は setSBUpLow() 行409+ 0x9となっています。 この関数はWinMainCRTStartup()で呼び出されています。この関数はAPIです。 Windowを初期化するときに自動的に呼ばれているようです。 自分のプログラムのどの部分でエラーが起こっているか調べたところ、クラスのコンストラクタ内で行っている次の処理が原因のようです。  int **test;  test= new int*[10];  for(int i = 0; i < 10; i++){   test[i] = new int[10];  } この部分をコメントアウトするとエラーが発生しなくなります。 new演算子でメモリを確保しているときにエラーが発生 しているようです。 なぜ、Debug.exeで実行したときだけ エラーがでるのでしょうか? また、エラーが発生しないようにするにはどうすればいいのでしょうか?

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

>Debug.exeで実行したときだけ エラーがでるのでしょうか? Debug版とRelease版は別物だからです。 DebugでエラーがでるけどReleaseだとでなくなる。 逆にReleaseだと止まるけどDebugだと問題なく起動する。 VC++でプログラムしているとよくあることですが、私の経験的に どこかであやまってポインタを参照しているケースがほとんどです。 class A; class B; 例えばclass BのコンストラクタがクラスAのメモリを破壊している等。 どこを直せばいいかといっても作った本人が一番詳しいわけで 具体的にどこを直せばいいかは、恐らくソース全体をみないと分かりません。 問題のメモリがどのタイミングでどのメモリが書き換えられているか や、エラーが発生したときthisポインタが 正しいアドレスかどうか、を先ず調べてください。 本当にわからない場合は、混合モードで追っていくものです。

lilillii
質問者

お礼

回答ありがとうございました。 説明が悪かったようです。 Debug版とRelease版ともに起動した瞬間にエラーがでていました。実行できたのはVC++上で実行したときだけです。 いろいろ調べてみたら、newしているところが多いと実行できなくなっていました。そこで、メモリの使用量が多すぎるのかもとおもい、宣言しているところを見直したところ、 char *wkStr = new char; とcharの大きさを指定せずに宣言している箇所があり、 char *wkStr = new char[10]; と宣言を直したら実行できるようになりました。

すると、全ての回答が全文表示されます。