问题填写并输出3D数组

时间:2016-02-25 01:14:42

标签: c++ random multidimensional-array

我正在尝试创建一个三维数组,其中填充的伪随机数范围为0到9(含)。这是我第一次使用包含2个以上维度的数组,所以我有点迷失。

首先,输入到数组中的唯一数字是1,但是在更改了一些代码之后,除了最后一个数字之外的每个数字都是1,最后一个数字是伪随机数。为了让我遇到的新情况更糟糕,当我点击回车时,我收到一条奇怪的错误消息。weird error message

除了这两个错误(错误填满数组和调试错误),我也无法弄清楚如何在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");
}

2 个答案:

答案 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];

并且超出范围并始终返回相同的值。