我正在尝试运行一个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");
}
有人可以给我一个快速解决/解释
答案 0 :(得分:14)
你有两次行
for (int x = 0; x <= 9; ++t){
当你的意思
for (int x = 0; x <= 9; ++x){
经典的复制粘贴错误。
顺便说一句,如果你在调试器中运行它并查看变量的值,很容易看出发生了什么。
答案 1 :(得分:2)
大卫的回答是正确的。
顺便提一下,惯例是使用i,j和k表示嵌套迭代器索引,并使用&lt; array_length而不是&lt; = 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
}
}
}