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 而不是 <= array_length -1 作为终止符。

如果你这样做,那么你可以使数组大小成为一个常数并摆脱一些幻数。

此外,在您使用数组索引时的断言可能会指出错误。

结果可能如下所示:

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 回答