我正在尝试创建一个三维数组,它被0到9之间的伪随机数填充(包括在内)。这是我第一次使用包含超过2维的数组,所以我有点迷路了。
最初,输入到数组中的唯一数字是1,但是在更改了一些代码之后,除了最后一个数字之外,每个数字都是1,最后一个数字是伪随机的。更糟糕的是,在我所处的新情况下,当我按回车时,我会收到一条奇怪的错误信息。
除了这两个错误(填充数组错误和调试错误)之外,我也不知道如何在世界上以3组3×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");
}
发布于 2016-02-25 01:16:19
声明一个3x3x3数组。
然后继续初始化,就好像它是一个4x4x4数组。下面是对代码哪里出错的简化解释:
int foo[3];
这声明了一个3元素数组.foo[0]
通过foo[2]
。
for (int bar=0; bar<4; ++bar)
{
foo[bar]=1;
}
这将尝试通过foo[0]
初始化foo[3]
。四个元素。三元素数组。
未定义的行为。
您的代码在所有三个维度上都会产生相同的错误,但使用的是三维数组.
发布于 2016-02-25 01:22:57
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];
并且超出了范围,并且总是返回相同的值。
https://stackoverflow.com/questions/35616443
复制相似问题