0

3D 配列を実行しようとしていますが、コードを実行すると Windows でコードがクラッシュします。これが私のコードです。

#include <iostream>

using namespace std;

int main(){

    int myArray[10][10][10];

    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){            
            for (int x = 0; x <= 9; ++t){

                myArray[i][t][x] = i+t+x; 

            }

        }

     }


    for (int i = 0; i <= 9; ++i){
        for (int t = 0; t <=9; ++t){
            for (int x = 0; x <= 9; ++t){

                cout << myArray[i][t][x] << endl;

            }

        }

    }

    system("pause");

}

誰かが私に簡単な修正/説明を投げてくれますか

4

2 に答える 2

14

あなたは二度ラインを持っています

for (int x = 0; x <= 9; ++t){

あなたが意味するとき

for (int x = 0; x <= 9; ++x){

古典的なコピー アンド ペースト エラー。

ところで、これをデバッガで実行して変数の値を見ると、何が起こっているかを簡単に確認できます。

于 2008-12-11T18:55:50.347 に答える
2

デビッドの答えは正しいです。

ちなみに、ネストされたイテレータ インデックスには i、j、k を使用し、ターミネータとして <= array_length -1 ではなく < array_length を使用するのが慣例です。

これを行うと、配列のサイズを一定にして、いくつかのマジック ナンバーを取り除くことができます。

また、配列インデックスを使用するポイントでのアサーションがエラーを示している可能性があります。

結果は次のようになります。

const std::size_t ARRAY_SIZE = 10;

int myArray[ARRAY_SIZE][ARRAY_SIZE][ARRAY_SIZE];

for (std::size_t i = 0; i < ARRAY_SIZE; ++i) 
{
    for (std::size_t j = 0; j < ARRAY_SIZE; ++j)
    {
        for (std::size_t k = 0; k < ARRAY_SIZE; ++k)
        {
            std::assert (i < ARRAY_SIZE && j < ARRAY_SIZE && k < ARRAY_SIZE);
            // Do stuff
        }
    }
}
于 2008-12-11T19:36:10.797 に答える