2011-06-18 8 views
0

(C++ CLRベースプロジェクト)クラッシュコンソールアプリケーション、ループの終わり。アドバイスを探しています。 (内部図)

以下の図は、デバッグプロセスを示しています。基本的にこのプログラムは、ゲームのための単純なASCIIレベルを描くように設計されています。 (30、X 30、およびループの各反復で文字(「空間」または「+」のいずれか)を引く)

http://imageshack.us/photo/my-images/52/prgramcrash.jpg/

xがyは高さ、幅です。したがって、30回折り返して '+'を描くと、yはその行を次の行に変更し、より多くの '+'を描画し始めます。しかし、最初の行の30 '+'が描画された後、デバッグプロセスで取る非常に次のステップは、アプリケーションをクラッシュさせます(右下にその奇妙なメッセージが表示されます)。

クラッシュが発生し、他のコード行が1つも読み取られない場合、プログラムは30 '+を計画どおりに印刷し、for(x)ループの終了時に( yのために、高さループ)それはちょうど死ぬ。

これはチュートリアルに基づいています。私は一緒に従っています。私はビデオを一日中チェックしてコードをチェックして間違いを探しましたが、確かに何かが欠けています。

私は下のリンクにコード全体(コード::ブロックプロジェクト)を表示していますが、私はそれほど助けてくれる人はいないと思っています:p、本当により多くの経験を持つ人には何がこのクラッシュを引き起こしているのか、そして私に問題の解決に向けて正しい方向に微笑んでください。

私は本当にあなたが助けることを願っています! :D

コードブロックのプロジェクトリンク:http://www.mediafire.com/?15nw8saa6x86b80

+0

おそらく後者の場合、インデックスにあるので

for (int x = 0; x < screenWidth; x++) { for (int y = 0; y < screenHeight; y++) { // do stuff with level[x][y] } } 

:とは対照的に

for (int x = 0; x < levelWidth; x++) { for (int y = 0; y < levelHeight; y++) { // do stuff with level[x][y] } } 

たとえば、あなたはの線に沿って何かをしたい場合がありますマップまたはtitleImage変数の範囲外エラー。 –

+0

私はSaniとここで同意します。地図[x] [y]が外れているかどうかチェックしましたか?または、tileImage [...]はどうですか? map [x] [y]は、tileImageに有効な範囲インデックス範囲[0、15]内にないものを返す可能性があります。 –

+0

We; StackOverflowに来てください。コードに外部(オフサイト)リンクを提供しないでください。それは人々が見ることをより困難にし、またSOに関連して見分けがつかないようにする。あなたの質問には答えが出にくくなります。本当に関心のあるトピックや質問が見つからない限り、私は通常、あなたがここで何を求めているかを正確に把握するために、時間と労力を浪費しません。 SOの仕組みや質問のヒントについては、[FAQ](http://stackoverflow.com/faq)を読んで数分を過ごすこともできます。 :) –

答えて

2

ここでの問題は、あなたが80の幅と高さを持っているあなたのdrawEngineを定義しているということです。

class DrawEngine 
{ 
    public: 
     DrawEngine (int xSize = 80, int ySize = 50); 
... 
}; 

しかし、あなたがレベルを作成するとき、あなたは「レベルは、サイズ30×30でなければなりませんと言って再:

bool Game::run(void) 
{ 

    level = new Level(&drawArea, 30, 30); 
    .... 
} 

そして、あなたは、サイズ30×30の配列を持っているあなたのレベルを設定し、あなたがdrawAreaにその30×30の配列を渡し:

Level::Level(DrawEngine *de, int w, int h) 
{ 
    drawArea = de; 

    width = w; 
    height = h; 

    player = 0; 

    // char** create memory for every position in the level. 
    level = new char *[width]; 

    for (int x = 0; x < width; x++) 
     level[x] = new char[height]; 


    //create the level 
    createLevel(); 

    drawArea->setMap(level); 
} 

それはそれは実際には30×30だとき、それはそれ以上のループは、サイズ80×80だことを、アレイがある考えているので、ここでは、このループは、実際に、範囲外の起こっている:

void DrawEngine::drawBackground(void) 
{ 
    if (map) 
    { 

     for (int y = 0; y < screenHeight; y++) 
     { 
      gotoxy(0, y); 

      for (int x = 0; x < screenWidth; x++) 
       cout << tileImage[map[x][y]]; 
     } 
    } 
} 

んので、どのようにあなたはこれを解決する?さて、サイズを変更して何とか一致させるか、画面が実際のレベルよりも大きくなる可能性があることを適切に説明するコードを追加する必要があります。

if (screenWidth > levelWidth || screenHeight > levelHeight) 
BadThingsWillHappen(); 
+0

私はあなたを愛しています、私は本当にあります。 –

関連する問題