我有两个问题。
首先,我展示了我的代码:
int _tmain(int argc, _TCHAR* argv[])
{
int i = 0;
int j = 0;
int k = 0;
int pom1_1 = 28;
int pom2_1 = 0;
int pom3_1 = 1;
double ***observace_r = new double **[28];
for (int i = 0; i < 28; i++)
{
observace_r[i] = new double *[40];
for (int j = 0; j < 40; j++)
observace_r[i][j] = new double [3];
}
observace_r[pom1_1][pom2_1][pom3_1] = 100; //THERE IS THE PROBLEM NO.1
double ***dif_observace_ref = new double **[28];
for (int i = 0; i < 28; i++)
{
dif_observace_ref[i] = new double *[40];
for (int j = 0; j < 40; j++)
dif_observace_ref[i][j] = new double [3];
}
dif_observace_ref[i][j][k] = observace_r[pom1_1][pom2_1][pom3_1]; //THERE IS THE PROBLEM NO.2
system("pause");
return 0;
}
我的问题:
第一个:我不知道如何为3d数组的元素赋值。如果我在此代码中尝试它,程序崩溃。但如果我这样写的话:
observace_r[0][0][0] = 100;
程序将被执行。为什么它以这种方式工作?
第二个:如果我在3d数组的两个元素之间传递一个double值,它也会崩溃。为什么我会传递这个值?
感谢所有建议!
答案 0 :(得分:3)
第一个和第二个问题是,索引28
实际上是在数组边界之外,并且您正在尝试取消引用无效指针。
observace_r[pom1_1][pom2_1][pom3_1] = 100; // pom1_1 = 28