• 締切済み

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]; と宣言を直したら実行できるようになりました。

関連するQ&A

  • C++ Debug Errorについて教えて

    Visual C++ 2008 Express Edition を使っています。 シューティングゲームのサンプルで勉強しています。 すべで正常終了したあとダイヤログボックスが 出てくる時にMicrosoft Visual C++ Debug Library と言うエラーが発生しました。 状況は以下のとおりです。 Program:C:\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2008用.exe Module:C:\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\DxLib_VC2008用.exe File: Run-Time Check Failure #3 - The variable 'temp' is being used without being initialized (Press Retry to debug the application) Run-Timeの部分から自分なりに調べてみたのですが ランタイム・チェック失敗#3-変数'temp'は初期化されずに使用されています。 と書いてあると思うのですが、tempの部分のコードは以下です。 (define.h) struct E_SHOT{ bool flag;//弾が発射中かどうか double x;//x座標 double y;//y座標 int gh;//グラフィックハンドル int width,height;//画像の幅と高さ int pattern;//ショットパターン int speed;//弾スピード }; #define ENEMY_SNUM 50//敵の弾の上限 (enemy.cpp) int temp; //弾画像読み込み if(stype==0){ temp=LoadGraph("enemyshot1.png"); } //サイズ取得 int w,h; GetGraphSize(temp,&w,&h); //弾の初期化 for(int i=0;i<ENEMY_SNUM;++i){ shot[i].flag=false; shot[i].gh=temp; shot[i].width=w; shot[i].height=h; shot[i].pattern=s_pattern; shot[i].speed=speed; shot[i].x=x; shot[i].y=y; } 正常終了後のエラーがなぜでるのかについてと、 その内容の部分について教えてください。 お願いします。

  • Java、実行時にエラーになります。

    class test14 { public static void main(string args[]) { byte b; int i = 258; b = (byte)i; System.out.println(b); //2を表示する } } C:\WORK>javac test14.java C:\WORK>java test14 エラー: メイン・クラスtest14を検出およびロードできませんでした 原因: java.lang.ClassNotFoundException: test14 いつも教えてもらってばかりですいません。 上記のプログラム、コンパイル出来ましたが 実行時、エラーになります。 どうしてでしょうか? 教えてください。 ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • C++ : cout << (数字) で実行時エラーが発生する理由

    ある特定の位置でcout を用いて数字を表示しようとするとエラーが発生してしまいます。 具体的には以下の関数内でのことなのですが、原因の分かる方がいましたら解答お願いします。 受け取った文字列を逆順にする関数です。 ---------------------------------------------------------- void rev_str(char *a) { int length = 0; cout << length; // ここでエラーが発生 while(true) { if(*(a + length) == '\0') break; length++; } for(int i = 0; i < length / 2; i++) { char temp = a[i]; a[i] = a[length - i - 1]; a[length - i - 1] = temp; } } --------------------------------------------------------- エラーの発生する部分ですが、数字ではなく文字・文字列なら問題なく表示されます。 このコードでは変数 length を表示しようとしていますが、length でなくても、またどのような『数』でも『この関数内』で cout を使用するとエラーが発生します。 この関数に何か間違いがあるのではないかと思うのですが、どうにも見つけることが出来ません。 コード全体はこの下に掲載します。 cout に何か制約があるのでしょうか。それとも、やはりコードのどこかに誤りがあるのでしょうか。わかる方がいましたら、解答お願いします。 全コード ------------------------------------------------------ #include <iostream> #include <cstring> using namespace std; void rev_str(char *a); void rev_str(const char *source, char *des); int main() { char a[80], b[80]; strcpy(a, "hello, world!"); rev_str(a, b); rev_str(a); cout << a << "\n"; cout << b << "\n"; return 0; } void rev_str(char *a) { int length = 0; cout << length; while(true) { if(*(a + length) == '\0') break; length++; } for(int i = 0; i < length / 2; i++) { char temp = a[i]; a[i] = a[length - i - 1]; a[length - i - 1] = temp; } } void rev_str(const char *source, char *des) { char *a = (char*)malloc(sizeof(source)); strcpy(a, source); rev_str(a); strcpy(des, a); free(a); }

  • 実行時エラー 28

    今まで問題なく実行出来ていたコードが ---------------------------- 実行時エラー 28 スタック領域が不足しています ---------------------------- と言うエラーが発生ました Call test と言うところでです。 エクセル2010、win8.1です。 「スタック領域」とは何でしょうか?メモリでしょうか?

  • C言語 動的なメモリの確保 コンパイル時エラーも警告もないのに実行できない

    配列A[3]を{2, 4, 6}と初期化させ、malloc関数を使いメモリを確保しそこへ先程の配列Aの要素を記憶させ、ポインタ*Nを使い確保したメモリの要素を表示するプログラムです。 ********************************************* #include <stdio.h> #include <stdlib.h> int main(void) {   int A[3] = {2, 4, 6};   int i;   int *N;   N = (int *) malloc (3);   for(i = 0; i < 3; i++){     N[i]= A[i];   }   for(i = 0; i < 3; i++){     printf("%d", N[i]);   }   free(N);   return 0; } ********************************************* VCを使いF10のデバッグテストでは正常に動くのですが、コマンドラインからではエラー報告画面がでます。なぜなのでしょうか?

  • 実行途中でのエラー発生について

    こんばんは。 この掲示板を頻繁に利用させていただいている者です。 Visual C++.NET 2003を利用しソケットプログラミングをしていたところ、突然わけの分からないエラーが途中で発生してしまいます。 [エラー内容] Debug Assertion Failed! File: fprintf.c Line:56 Expression: str != NULL For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts. (Press Retry to debug the application) 上記のようなエラー内容です。 今まで実行可能であったのに、突然エラーメッセージが発生しました。 Line:56ということから56行目を見たところ、str != NULLという記述もしていませんし、かつその行はコメントを記述しています。 なにか原因があるのでしょうか? よろしくお願いします。

  • VB4.EXE で 実行時エラー '31037'

    WIN2000 で VB4.EXE を 動かそうとすると 実行時エラー '31037' ファイルの読み込み中にエラーが発生しました。 とエラーが出ます。 どうやらグリッド部分の読み込みで エラーが出てるみたいです。 VB6.EXE を 設定した人間が 環境を変えたらしく 今までのように最低限のDLL,OCXで 動かなくなりました。 VB4.EXE と VB6.EXE を 共存させるには どうすればいいでしょうか?

  • VC++のエラー

    windows xp VC++ 6.0 http://www.kumei.ne.jp/c_lang/intro/no_57.htm に書いてある通りに、タイプをwin32 Application で 設定して、 #include <windows.h> int WINAPI WinMain( HANDLE hInstance , HANDLE hPrevInstance , LPSTR lpCmdLine , int nCmdShow ) { MessageBox(NULL, (LPCSTR)"メッセージ・ボックスのテストです。", (LPCSTR)"猫でもわかるプログラミング", MB_OK); return 0; } をプロジェクトに追加し、ビルドすると、 ******************************** --------------------構成: aaadf - Win32 Debug-------------------- コンパイル中... fdfdfdf.cpp D:\VC\aaadf\fdfdfdf.cpp(7) : error C2731: 'WinMain' : 関数はオーバーロードできません。 D:\VC\aaadf\fdfdfdf.cpp(5) : 'WinMain' の宣言を確認してください。 cl.exe の実行エラー fdfdfdf.obj - エラー 1、警告 0 ********************************* とエラーになります。 何がいけないのかさっぱりわかりません。。

  • 実行ファイル(.exe)が別のPCで実行できない

    お世話になります。 VC++で、MFCアプリケーションプロジェクトより ダイアログベースでアプリを作成したのですが、 その実行ファイル.exeを別のWindowsPCで 実行すると、 ”「MFC71.DLL」が見つからなかったため、このアプリケーションは開始できませんでした。アプリケーションをインストールしなおすことの問題は解決される場合があります。” というエラーメッセージが出て実行できません。 どのようにすれば、実行できるのでしょうか? また、Releaseモードでビルドした場合、 Debugモードでビルドしたときには、出なかった 「error LINK2019:未解決の外部シンボル・・・。」という エラーがでます。 どうぞよろしくお願い致します。

  • VC++ exeからはdatファイルが開けるのに、

    【VC++ exeからはdatファイルが開けるのに、VSのF5で実行した際には開けません。】  今日は、質問させていただきます。どうぞよろしくお願いいたします。  環境:VS2010 ProのVC++、Win7 でございます。  下のコードで、VSからF5(「Debug」と「Win32」選択)で実行すると Debugフォルダ内の「test.dat」が開けないエラーが出て悩んでおりましたが、 その際にDebugフォルダ内に作られたexeァイルから実行すると「test.dat」ファイルが何故か開けております。  fstream fs("test.dat", ios_base::in); string line; stringstream ss; if (!fs.is_open()) { cerr << "File open error" << endl; }  test.datはDebugフォルダ内に入れております。試しにslnファイルがある階層にも入れてみましたが、F5実行の際は開けませんでした。  ファイル名「test.dat」は間違っておりません。Windowsで拡張子を非表示にするようなこともしておりません。  英語サイトなどをずっと検索しておりましたが、いずれも上記のような事で解決しており、参考になる情報を見つける事ができませんでした。。。  どうにかしてF5実行時に開けるようにしたいのですが、行き詰まっております。 もし何かお気づきになられる方がいらっしゃいましたら、是非アドバイスいただけないでしょうか。 もしお詳しい方がいらっしゃいましたら何卒、よろしくお願いいたします。

専門家に質問してみよう