当我发布一个类似的问题在这里:系统崩溃赋予新的价值数组
why it crashes when assigning new values to arrays?
但这个时候,我又遇到了阵列的另一个问题。我的代码是这样的:
double diff[600][800][3];
cv::Mat value (height, width, CV_8UC3);
double mean[600][800][3];
....
for (int i =0; i < 5; ++ i)
{
for (int j = 0; j < 3; ++j)
{
for (int m = 0; m < 2; ++m)
{
mean[i][j][m] = 10/m;
diff[i][j][m] = abs (value.data[value.cols*i+j]-mean[i][j][m]);
}
}
}
坠毁在该行:
diff[i][j][m] = abs (value.data[value.cols*i+j]-mean[i][j][m]);
我甚至忽略这一行,只是这样写:
double test = abs (value.data[value.cols*i+j]-mean[i][j][m]);
,它编译,然后我加了
std::cout << test << std::endl;
它再次坠毁,而这条线也应声:
diff[i][j][m] = test;
我甚至改变这样的:
double test = static_cast<double>(abs(value.data[value.cols*i+j]-mean[i][j][m]));
diff[i][j][m] = test;
再次崩溃。如果我这样写:
diff[i][j][m] = 10;
它编译。我真的不知道这个问题。似乎这与堆栈溢出或数据类型无关。我甚至尝试过Aki Suihkonen对我以前的问题的回答,但它无能为力。有人可以帮我在这里找到问题吗?
堆栈上将近300万双打。糟糕的堆栈。 – chris
什么大小是value.data数组?我想你正尝试访问你不允许的内存。 – tomahh
@Tom:值的大小是600x800。 –