當我發佈一個類似的問題在這裏:系統崩潰賦予新的價值數組
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。 –