我正在尝试创建一个三维数组,其中填充的伪随机数范围为0到9(含)。这是我第一次使用包含2个以上维度的数组,所以我有点迷失。
首先,输入到数组中的唯一数字是1,但是在更改了一些代码之后,除了最后一个数字之外的每个数字都是1,最后一个数字是伪随机数。为了让我遇到的新情况更糟糕,当我点击回车时,我收到一条奇怪的错误消息。
除了这两个错误(错误填满数组和调试错误),我也无法弄清楚如何在3个3 x 3数字组中打印出来,虽然现在,这是一个较低的问题我的议程(尽管有人会对此表示赞赏)。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(){
srand(time(NULL));
const int arrayRow = 3, arrayColumns = 3, arrayDepth = 3;
int fun[arrayRow][arrayColumns][arrayDepth];
for (int r = 0; r < 4; r++){
for (int c = 0; c < 4; c++){
for (int d = 0; d < 4; d++){
int value = rand() % 10;
fun[r][c][d] = value;
cout << fun[arrayRow][arrayColumns][arrayDepth];
}
}
}
cout << "Complete." << endl;
system("pause");
}
答案 0 :(得分:1)
您声明一个3x3x3阵列。
然后继续初始化,好像它是一个4x4x4阵列。以下简要说明了代码出错的地方:
int foo[3];
这声明了一个3元素数组。 foo[0]
到foo[2]
。
for (int bar=0; bar<4; ++bar)
{
foo[bar]=1;
}
这会尝试初始化foo[0]
到foo[3]
。四个要素。三元素阵列。
未定义的行为。
您的代码在所有三个维度中都会产生相同的错误,但是使用三维数组。
答案 1 :(得分:0)
fun[arrayRow][arrayColumns][arrayDepth]
分配一个数组,每个轴上的索引范围为0 .. 2。
for (int r = 0; r < 4; r++){
从0到3漫游并超出阵列。
for (int r = 0; r < arrayRow; r++){
会解决这个问题。您必须对其他for
循环执行相同操作,并且它们都超出范围。
此外,
cout << fun[arrayRow][arrayColumns][arrayDepth];
解析为
cout << fun[3][3][3];
并且超出范围并始终返回相同的值。