• 締切済み

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; } 正常終了後のエラーがなぜでるのかについてと、 その内容の部分について教えてください。 お願いします。

みんなの回答

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

int temp; //弾画像読み込み if(stype==0){  temp=LoadGraph("enemyshot1.png"); //←stype==0のときしかtempが初期化されない } //サイズ取得 int w,h; GetGraphSize(temp,&w,&h); //←stype!=0のときのtempはどうなる? //弾の初期化 for(int i=0;i<ENEMY_SNUM;++i){  shot[i].flag=false;  shot[i].gh=temp; //←stype!=0のときの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; } stype!=0のときもtempが初期化されるように直してみましょう。

関連するQ&A

  • C++デバックエラーについて詳しく教えてください。

    Microsoft Visual C++ Debug Library と言うエラーが発生しました。 Visual C++ 2008 Express Edition を使っています。 状況は以下になります。 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'は初期化されずに使用されています と書いてあると思います。 それで いろいろみなさんに意見をいただいたのですが stype!=0のときの処理が書けません。 初期化は出来たのですが、複数の敵が弾をだすはずが プレイヤーしかでなくなりました。 またいろいろ意見お願いします。 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) #include "pch.h" #include "enemy.h" ENEMY::ENEMY( int type,//敵タイプ、 int stype,//弾種類 int m_pattern,//移動パターン、 int s_pattern,//発射パターン int in_time,//出現時間、 int stop_time,//停止時間、 int shot_time,//弾発射時間、 int out_time,//帰還時間、 int x,//x座標、 int y,//Y座標、 int speed,//弾スピード int hp,//HP int item//アイテム) { //サイズ width=27; height=25;      //敵の種類 this->type=type; //弾の種類 this->stype=stype; //移動パターンとショットパターン this->m_pattern=m_pattern; this->s_pattern=s_pattern;      this->speed=speed; //座標セット this->x=x; this->y=y; //出現、停止、発射、帰還セット this->in_time=in_time; this->stop_time=stop_time; this->shot_time=shot_time; this->out_time=out_time; //hpとアイテム代入 this->hp=hp; this->item=item; //弾初期化 memset(shot,0,sizeof(shot)); //敵画像読み込み if(type==0){ LoadDivGraph("enemy.png",3,1,3,27,25,gh); } 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; } count=0; scount=0; deadflag=false; endflag=false; sflag=false; } void ENEMY::Move() { //出てきてから止まる時間までの間なら下に移動 if(in_time<g_count && g_count<stop_time){   y+=2;      //帰還時間を過ぎたら戻る。 }else if(g_count>out_time){    y-=2;    if(y<-40){    deadflag=true;  }    } } void ENEMY::Draw() { int temp; //弾から最初に描画 for(int i=0;i<ENEMY_SNUM;++i){ if(shot[i].flag){ DrawGraph(shot[i].x,shot[i].y,shot[i].gh,true); } } if(!deadflag){ temp= count%40/10; if(temp==3) temp=1; DrawGraph(x,y,gh[temp],TRUE); } } bool ENEMY::All() { Move(); Shot(); Draw(); ++count; return endflag; } void ENEMY::Shot() { //発射タイミングになったら、フラグを立てる if(shot_time==g_count){    sflag=true;    } //フラグを立てるときだけ if(sflag){   switch(s_pattern){ case 0: //10回に一回発射。40までなので5発発射。 if(scount%10==0 && scount<=40){ for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立ってない弾を探して、座標をセット if(shot[i].flag==false){   shot[i].flag=true; shot[i].x=x; shot[i].y=y; break; } } } break; } //フラグが立ってる弾の数 int s=0; //フラグが立ってる弾だけ、弾の移動を行う for(int i=0;i<ENEMY_SNUM;++i){ if(shot[i].flag){ shot[i].y+=shot[i].speed; //弾が画面をはみ出たらフラグを戻す。 if(shot[i].x<-20 || shot[i].x>420 || shot[i].y<-20 || shot[i].y>500){ shot[i].flag=false; continue; } ++s; } } //sがゼロということは発射中の弾がない。 //かつdeadflagがTRUEということはこの敵のクラスは消滅させてよい if(s==0 && deadflag){ //敵クラス消滅フラグをTRUEにする endflag=true; } ++scount; } }

  • C++デバックエラーについて詳しく教えてください。

    Picosoftさんまだ未熟で解消できませんでした。 また見てたらお願いします。 他の人もお願いします。 Microsoft Visual C++ Debug Library と言うエラーが発生しました。 Visual C++ 2008 Express Edition を使っています。 状況は以下になります。 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) #include "pch.h" #include "enemy.h" ENEMY::ENEMY( int type,//敵タイプ、 int stype,//弾種類 int m_pattern,//移動パターン、 int s_pattern,//発射パターン int in_time,//出現時間、 int stop_time,//停止時間、 int shot_time,//弾発射時間、 int out_time,//帰還時間、 int x,//x座標、 int y,//Y座標、 int speed,//弾スピード int hp,//HP int item//アイテム) { //サイズ width=27; height=25;      //敵の種類 this->type=type; //弾の種類 this->stype=stype; //移動パターンとショットパターン this->m_pattern=m_pattern; this->s_pattern=s_pattern;      this->speed=speed; //座標セット this->x=x; this->y=y; //出現、停止、発射、帰還セット this->in_time=in_time; this->stop_time=stop_time; this->shot_time=shot_time; this->out_time=out_time; //hpとアイテム代入 this->hp=hp; this->item=item; //弾初期化 memset(shot,0,sizeof(shot)); //敵画像読み込み if(type==0){ LoadDivGraph("enemy.png",3,1,3,27,25,gh); } 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; } count=0; scount=0; deadflag=false; endflag=false; sflag=false; } void ENEMY::Move() { //出てきてから止まる時間までの間なら下に移動 if(in_time<g_count && g_count<stop_time){   y+=2;      //帰還時間を過ぎたら戻る。 }else if(g_count>out_time){    y-=2;    if(y<-40){    deadflag=true;  }    } } void ENEMY::Draw() { int temp; //弾から最初に描画 for(int i=0;i<ENEMY_SNUM;++i){ if(shot[i].flag){ DrawGraph(shot[i].x,shot[i].y,shot[i].gh,true); } } if(!deadflag){ temp= count%40/10; if(temp==3) temp=1; DrawGraph(x,y,gh[temp],TRUE); } } bool ENEMY::All() { Move(); Shot(); Draw(); ++count; return endflag; } void ENEMY::Shot() { //発射タイミングになったら、フラグを立てる if(shot_time==g_count){    sflag=true;    } //フラグを立てるときだけ if(sflag){   switch(s_pattern){ case 0: //10回に一回発射。40までなので5発発射。 if(scount%10==0 && scount<=40){ for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立ってない弾を探して、座標をセット if(shot[i].flag==false){   shot[i].flag=true; shot[i].x=x; shot[i].y=y; break; } } } break; } //フラグが立ってる弾の数 int s=0; //フラグが立ってる弾だけ、弾の移動を行う for(int i=0;i<ENEMY_SNUM;++i){ if(shot[i].flag){ shot[i].y+=shot[i].speed; //弾が画面をはみ出たらフラグを戻す。 if(shot[i].x<-20 || shot[i].x>420 || shot[i].y<-20 || shot[i].y>500){ shot[i].flag=false; continue; } ++s; } } //sがゼロということは発射中の弾がない。 //かつdeadflagがTRUEということはこの敵のクラスは消滅させてよい if(s==0 && deadflag){ //敵クラス消滅フラグをTRUEにする endflag=true; } ++scount; } } になります。 ビルドの正常終了後になぜエラーがでるかと 内容を詳しく説明いただけるとありがたいです。 よろしくお願いします。

  • C++での乱射ショットについて教えてください。

    お疲れ様です。 今回もお世話になります。 シューティングゲームのサンプルで勉強しています。 サンプルの乱射ショットの実行画面では弾が20発くらい 一度に乱射した状態で発射します。 自分の実行画面は1~2発、画面から後退するときに もう1~2発発射するだけです。 自分なりにコードを足してみたりしたのですが 2くらい増えただけで乱射になりません。 まだ理解不足で出来ませんでした。 何が足りないか教えてください。 以下は乱射部分だけのコードです。 その下にENEMY::Shot()の全体のコードを載せます。 失礼します。 //乱射ショット case 3: //1ループ毎に1発発射 for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立ってない弾を探して、座標セット if(shot[i].flag==false){ shot[i].flag=true; shot[i].x=x; shot[i].y=y; //初回だけ乱数初期化 if(num==0){ srand((unsigned int)time(NULL)); shot[i].rad=atan2(py-y,px-x)-(60*PI/180)+((rand()%120)*PI/180); ++num; break; } } } break; 以下はENEMY::Shot()の全体のコードです。 void ENEMY::Shot() { //CONTROLクラスの参照 CONTROL &control = CONTROL::GetInstance(); double px,py; //発射タイミングになったら、フラグを立てる if(shot_time==g_count){ sflag=true; } //フラグを立てるときだけ if(sflag){ //プレイヤーの一取得 control.GetPlayerPosition(&px,&py); //敵とプレイヤーとの座標の差から逆正接を求める。 //初回だけ実行 if(scount==0) rad=atan2(py-y,px-x); switch(s_pattern){ //前方にショット case 0: //5回に一回発射。20までなので5発発射。 if(scount%5==0 && scount<=20){ for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立ってない弾を探して、座標をセット f(shot[i].flag==false){ shot[i].flag=true; shot[i].x=x; shot[i].y=y; shot[i].rad=rad; break; } } } break; //プレイヤーに向かって直線ショット case 1: //6ループに一回発射。54までなので10発発射。 if(scount%6==0 && scount<=54){ for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立っていない弾を探して、座標をセット if(shot[i].flag==false){ shot[i].flag=true; shot[i].x=x; shot[i].y=y; shot[i].rad=rad; break; } } } break; //3直線ショット case 2: //10ループに一回発射。1ループに3発なので5ループさせると15発発射 if(scount%10==0 && scount<=40){ for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立っていない弾を探して、座標等をセット if(shot[i].flag==false){ shot[i].flag=true; shot[i].x=x; shot[i].y=y; //0の時は左より if(num==0){ //敵とプレイヤーとの逆正接から10度引いたラジアンを代入 shot[i].rad=rad-(10*3.14/180); //1の時はプレイヤー一直線 }else if(num==1){ //敵とプレイヤーとの逆正接を代入 shot[i].rad=rad; //2の時は右より }else if(num==2){ //敵とプレイヤーとの逆正接から10度足したラジアンを代入 shot[i].rad=rad+(10*PI/180); } ++num; //3発発射したら,numを0にしてループを抜ける。 if(num==3){ num=0; break; } } } } break; //乱射ショット case 3: //1ループ毎に1発発射 for(int i=0;i<ENEMY_SNUM;++i){ //フラグが立ってない弾を探して、座標セット if(shot[i].flag==false){ shot[i].flag=true; shot[i].x=x; shot[i].y=y; //初回だけ乱数初期化 if(num==0){ srand((unsigned int)time(NULL)); shot[i].rad=atan2(py-y,px-x)-(60*PI/180)+((rand()%120)*PI/180); ++num; break; } } } break; } //フラグが立ってる弾の数 int s=0; //フラグが立ってる弾だけ、弾の移動を行う for(int i=0;i<ENEMY_SNUM;++i){ if(shot[i].flag){ switch(shot[i].pattern){ //単純に下に発射 case0: shot[i].y+=shot[i].speed; break; case 1: shot[i].x+=shot[i].speed*cos(shot[i].rad); shot[i].y+=shot[i].speed*sin(shot[i].rad); break; case 2: shot[i].x+=shot[i].speed*cos(shot[i].rad); shot[i].y+=shot[i].speed*sin(shot[i].rad); break; case 3: shot[i].x+=shot[i].speed*cos(shot[i].rad); shot[i].y+=shot[i].speed*sin(shot[i].rad); break; } //弾が画面をはみ出たらフラグを戻す。 if(ShotOutCheck(i)){ shot[i].flag=false; continue; } ++s; } } //sがゼロということは発射中の弾がない。 //かつdeadflagがTRUEということはこの敵のクラスは消滅させてよい if(s==0 && deadflag){ //敵クラス消滅フラグをTRUEにする endflag=true; } ++scount; } }

  • 構文エラーについて教えてください

    申し訳ありません、初心者なので教えてください。 VC2005を使ってプログラミングをしております。 エラーは、以下のようになっております。 見づらいと思いますが、ご親切な方、よろしくお願いします。 申し訳ありません、初心者なので教えてください。 VC2005を使ってプログラミングをしております。 エラーは、以下のようになっております。 見づらいと思いますが、ご親切な方、よろしくお願いします。 c:\program files\microsoft platform sdk\include\mmreg.h : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\dxlib.h(1529) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。 c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(6) : error C3872: '0x3000': この文字を識別子で使用することはできません c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(7) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。 c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(7) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(7) : error C3872: '0x3000': この文字を識別子で使用することはできません c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(7) : error C3872: '0x3000': この文字を識別子で使用することはできません c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(8) : error C2144: 構文エラー : 'int' は ';' によって先行されなければなりません。 c:\documents and settings\yu-ki-pippi\デスクトップ\dxlib_vc\サンプルプログラム実行用フォルダ\test.cpp(8) : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません ブラウザ情報ファイルを作成しています... Microsoft Browse Information Maintenance Utility Version 8.00.50727 Copyright (C) Microsoft Corporation. All rights reserved. ビルドログは "file://c:\Documents and Settings\yu-ki-pippi\デスクトップ\DxLib_VC\サンプルプログラム実行用フォルダ\Debug\BuildLog.htm" に保存されました。 DxLib - エラー 7、警告 2 #include "Dxlib.h" struct CharaData{ int x; //左上座標 int y; int ghandle; //画像ハンドル int life;   //ライフ int image_w; //イメージの大きさ int image_h; int bounds_w; //判定領域の大きさ int bounds_h; }; *エラーをクリックするとこの部分でエラーが出てしまいます。

  • error C2664

    error C2664 int * x; int * y; SetMouseDispFlag( TRUE ); GetMousePoint( x,y ); int siro; siro= GetColor(255,255,255); if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) == 0 ) { DrawPixel( x , y , siro ) ; error C2664: 'DxLib::DrawPixel' : 1 番目の引数を 'int *' から 'int' に変換できません。 どうすりゃいいの?

  • C言語 DXライブラリ

    #include <math.h> #include "DxLib.h" #define PI 3.1415926f int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){ ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); int Handle[3]; LoadDivGraph( "画像/弾01.png", 3, 3, 1, 14, 16, Handle ); float x=320,y=240,angle=0,speed=1; while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){ x += cos( angle ) * speed; DrawRotaGraph( x, y, 1.0, angle+PI/2, Handle[0], TRUE ); } DxLib_End(); return 0; } これを実行すると画像が右に動いていくのですが、なぜ動くのかわかりません。 x += cos( angle ) * speed; の部分はx=320+0*1という事だと思っているのですが、これだとxはずっと320のままで画像が右に動いて行かないと思います。 教えてくださいm(_ _ )m

  • C++超初心者質問

    Visual C++ 2008 Express Edition Ver9.0.30729.1 SP を利用し、以下のプログラムを実行するための手順を教えてください。 Visual C++ 6.0では、ファイル>新規作成→ファイルTAB>C++ソースファイルのように、上記の場合はどのように進んだらよいのでしょう? ファイル>新規作成>プロジェクト→Win32 コンソール アプリケーション??? とすると、↓のエラーが出てしまいます。尚、VC2008をインストールしてから何も触っていません。 http://okwave.jp/qa4665322.html ソース #include<iostream> using namespace std; class coord{ int x,y; public: coord(){x=0;y=0;} coord(int i,int j){x=i,y=j;} void get_xy(int &i,int &j){i=x;j=y;} friend coord operator+(coord ob1,int i); friend coord operator+(int i,coord ob1); }; coord operator+(coord ob1,int i){ coord temp; temp.x=ob1.x+i; temp.y=ob1.y+i; return temp; } coord operator+(int i,coord ob1){ coord temp; temp.x=ob1.x+i; temp.y=ob1.y+i; return temp; } int main(){ char c[3]; // 画面固定のため coord o1(10,10); int x,y; o1=o1+10;; o1.get_xy(x,y); cout<<"(o1+10)X:"<<x<<",Y:"<<y<<"\n"; o1=99+o1;; o1.get_xy(x,y); cout<<"(99+o1)X:"<<x<<",Y:"<<y<<"\n"; cout<<"\nエンターで抜けます"<<endl; // 画面固定のため gets(c); return 0; }

  • debugエラーについて

    VisualC++初心者です。 力を貸してください。 内容はDEBUG ERRORで Stack around the variable "rp" was corrupted Stack around the variable "res" was corrupted とでてしまいます。 構造体等は省略しました。 #include <stdio.h> #include <stdlib.h> #define N 8 typedef struct{ int maxi,maxj,akarusa[N][N]; unsigned char *data; }RESULT; int bunkatsu(BMP *rp,BMP *wp); int keisan(BMP *rp,BMP *wp); RESULT *max(RESULT *res); /* 画像の取込 */ int ReadHeader(BMP *p,FILE *fp){ unsigned int size; fseek(fp, 0, SEEK_END); size = ftell(fp); fseek(fp, 0, SEEK_SET); fread(&p->Bmpf.bfType, sizeof(unsigned short), 1, fp); fclose(fp); exit(1); } fread(省略) return 0; } int ReadBmp(BMP *p,FILE *fp){ int dummy, byte, i, j, pixel; unsigned char *ReadBody=0; ReadHeader(p,fp); byte = p->Bmpi.biBitCount/8; dummy = (p->Bmpi.biWidth%4)?(4-(p->Bmpi.biWidth*byte)%4) : 0; pixel = ((p->Bmpi.biWidth)*byte+dummy)*p->Bmpi.biHeight; ReadBody = (unsigned char*)calloc(pixel,sizeof(char)); p->body = (unsigned char*)calloc(pixel,sizeof(char)); p->blue = (unsigned char*)calloc((pixel/byte),sizeof(char)); p->green = (unsigned char*)calloc((pixel/byte),sizeof(char)); p->red = (unsigned char*)calloc((pixel/byte),sizeof(char)); fread(ReadBody,1,pixel,fp); if(p->Bmpi.biBitCount == 8){ printf("\n"); for(j=0;j<p->Bmpi.biHeight;j++){ for(i=0;i<p->Bmpi.biWidth;i++){ p->blue[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbBlue; p->green[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbGreen; p->red[(p->Bmpi.biWidth+dummy)*j+i] =p->Rgbq[ReadBody[(p->Bmpi.biWidth+dummy)*j+i]].rgbRed; } } for(j=0;j<p->Bmpi.biHeight;j++){ for(i=0;i<p->Bmpi.biWidth;i++){ p->body[(p->Bmpi.biWidth+dummy)*j+i]=ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)+i]; } } } else if(p->Bmpi.biBitCount == 24 || p->Bmpi.biBitCount == 32){ for(j=0;j<p->Bmpi.biHeight;j++){ for(i=0;i<p->Bmpi.biWidth;i++){ p->blue[(p->Bmpi.biWidth+dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte]; p->green[(p->Bmpi.biWidth+dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte+1]; p->red[(p->Bmpi.biWidth + dummy)*j+i] = ReadBody[(p->Bmpi.biWidth+dummy)*(p->Bmpi.biHeight-1-j)*byte+i*byte+2]; } } } else{ printf("失敗\n"); exit(1); } free(ReadBody); return 0; } /* 480×480にする */ int bunkatsu(BMP *rp,RESULT *res){ int x,y,a=0; for(y=0;y<rp->Bmpi.biHeight;y++){ for(x=79;x<rp->Bmpi.biWidth-80;x++){ res->data[a] = rp->blue[y*rp->Bmpi.biWidth+x]+rp->green[y* rp->Bmpi.biWidth+x]+rp->red[y*rp->Bmpi.biWidth+x]; a++; } } return 0; } /* ブロック分けして各ブロックの明るさを計算する */ int keisan(BMP *rp,RESULT *res){ int b,c,x,y,i=0,j=0; for(y=0;(y+60)<rp->Bmpi.biHeight;y+=60){ for(x=0;(x+60)<(rp->Bmpi.biWidth-160);x+=60){ for(b=0;b<60;b++){ for(c=0;c<60;c++){ res->akarusa[i][j]+=res->data[(y+b)*rp->Bmpi.biWidth+(x+c)]; } } j++; } i++; } max(res); return 0; } /* 一番明るいブロックの特定 */ RESULT *max(RESULT *res){ int MAX1=0,MAX2=0,i=0,j=0; for(i=0;i<8;i++){ for(j=0;j<8;j++){ printf("[%d][%d]=%d",i+1,j+1,res->akarusa[i][j]); if(MAX1<res->akarusa[i][j]){ MAX1=res->akarusa[i][j]; res->maxi=i; res->maxj=j; } } printf("\n"); } printf("一番明るいブロックは[%d][%d]です\n",res->maxi+1,res->maxj+1); return 0; } int main(void){ BMP rp={0}; RESULT res={0}; FILE *fp; /* 画像の取り込み */ fp=fopen("LED1.bmp","rb"); ReadBmp(&rp,fp); res.data = (unsigned char*)calloc(rp.Bmpi.biWidth*rp.Bmpi.biHeight,sizeof(char)); fclose(fp); fp=0; bunkatsu(&rp,&res); keisan(&rp,&res); return 0; } です。よろしくお願いします。

  • C++について教えてください。(初心者です)

    現在C++についての学習を進めているのですが、 2項演算子のオーバーロードで理解できないところがありますので、よろしかったらご教授ください。 //+をcoordクラスに対してオーバーロードする #include<iostream> using namespace std; class coord{ int x,y; public: coord() {x=0;y=0;} coord(int i,int j) {x=i;y=j;} void get_xy(int &i,int &j) {i=x;j=y;} coord operator+(coord ob2); }; //+をcoordクラスに対してオーバーロードする coord coord::operator+(coord ob2) { coord temp; temp.x = x + ob2.x; temp.y = y + ob2.y; return temp; } int main() { coord o1(10,10),o2(5,3),o3; int x,y; o3 = o1 + o2; o3.get_xy(x,y); cout << "(o1+o2) X:" << x << ",Y:" << y << endl; return 0; } この文の中で、o3.get_xy(x,y);というコードがありますが、 ここの部分がよくわからないのです。 そもそも、引数としてx,yがありますが、これはprivateメンバを 見に行きなさい。っと言っているのでしょうか? main()の中から直接使っている?? それとも?? すいません。この辺の理解が薄いようなので、2項演算子のオーバーロードとは関係ないかもしれませんが、教えてください。 よろしくお願いします。

  • 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で実行したときだけ エラーがでるのでしょうか? また、エラーが発生しないようにするにはどうすればいいのでしょうか?