C++ 向数组分配新值时系统崩溃

C++ 向数组分配新值时系统崩溃,c++,arrays,opencv,for-loop,variable-assignment,C++,Arrays,Opencv,For Loop,Variable Assignment,我在这里发布了一个类似的问题: 但这一次,我再次遇到了数组的另一个问题。我的代码如下: 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 &

我在这里发布了一个类似的问题:

但这一次,我再次遇到了数组的另一个问题。我的代码如下:

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]);
        }
    }
}
double test = static_cast<double>(abs(value.data[value.cols*i+j]-mean[i][j][m]));
diff[i][j][m] = test;
我甚至省略了那一行,只是这样写:

double test = abs ( value.data[value.cols*i+j]-mean[i][j][m]);
diff[i][j][m] = 10; 
然后我加了一句

std::cout << test << std::endl;
我甚至改成这样:

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]);
        }
    }
}
double test = static_cast<double>(abs(value.data[value.cols*i+j]-mean[i][j][m]));
diff[i][j][m] = test;
它编译。我真的搞不懂这个问题。这似乎与堆栈溢出或数据类型无关。我甚至试过Aki Suikkonen对我上一个问题的回答,但都没用。有人能帮我找到这里的问题吗

for(int m=0;m<2;++m)
    for ( int m = 0; m < 2; ++m )
    {
       mean[i][j][m] = 10/m;
       //...
     }
{ 平均[i][j][m]=10/m; //... }
这导致m=0的值除以0。。可能是碰撞的原因。

for(int m=0;m<2;++m)
{
平均[i][j][m]=10/m;
//...
}

这导致m=0的值除以0。。可能是撞车的原因。

可能是
双差[600][800][3]对于系统的默认堆栈大小太大。如果您有64位
double
s,那么这是11.5MB,而许多编译器默认为1MB堆栈大小

尝试
静态双差[600][800][3]对于其他大型阵列也是如此


如果您确实需要数组是非静态的(即,如果函数是可重入的),则需要使用动态分配。

可能
双差[600][800][3]对于系统的默认堆栈大小太大。如果您有64位
double
s,那么这是11.5MB,而许多编译器默认为1MB堆栈大小

尝试
静态双差[600][800][3]对于其他大型阵列也是如此


如果您真的需要数组是非静态的(即,如果函数是可重入的),则需要使用动态分配。

堆栈上几乎有300万个双倍数组。堆栈不好。value.data数组的大小是多少?我想你是在试图访问一些不允许访问的内存。@Tom:值的大小是600x800。@chris:你能提供一些改进建议吗?@ederman,在大多数情况下,向量类似于数组,但在多个维度中声明有点烦人。向量上有很多东西。它们在超过一个维度时也表现不太好(因此是包装器)。对于近300万个阵列,您有两个600*800*3=1440000双倍的阵列。堆栈上有近300万双倍的阵列。堆栈不好。value.data数组的大小是多少?我想你是在试图访问一些不允许访问的内存。@Tom:值的大小是600x800。@chris:你能提供一些改进建议吗?@ederman,在大多数情况下,向量类似于数组,但在多个维度中声明有点烦人。向量上有很多东西。它们在超过一个维度时也表现不太好(因此是包装器)。至于近300万,你有两个数组,每个数组有600*800*3=1440000个双倍。@bhuwanshni:我不这么认为,即使我试着给出一个像“25”这样的常量值,它也崩溃了。你还有其他想法吗?@bhuwanshni:我不这么认为,即使我尝试给出一个像“25”这样的常量值,它也崩溃了。你还有别的想法吗?