我的cpp项目在头文件中有静态2d数组但导致chkstk错误。我想让它充满活力。是否真的可以在标题中进行操作,因为更改项目的所有部分(大约12000行代码)很困难。
答案 0 :(得分:0)
根据Dietmar's answer on a similar problem,你很可能需要将静态二维数组放入一个函数中,以便及时初始化。
像这样:
double**& my_array()
{
static double** local = NULL;
if(!local)
{
// init your array here
}
return local;
}
您需要在代码中引用您的数组,例如my_array()
而不是my_array
。
编辑:
对于icepack的问题:是的,它看起来很奇怪(在我看来,无论如何都应该将一个多阵列包装成一个类,然后这不会发生)。使用这种奇怪的返回类型的原因如下:
// if you returned double** instead of double**&
my_array() = other_array; // would overwrite a temporary pointer
my_array(); // would be still the old array
如果使用C ++ 11,最简洁的解决方案是:
typedef std::array<std::array<double, second_dim>, first_dim> my_array_t;
my_array_t& my_array()
{
static my_array_t local = initial_value();
return local;
}
并使用与my_array
相同的my_array()
{/ 1}}。
即使您不使用C ++ 11,我建议您定义自己的2d_array类,无论如何,当您正确编写它时,它没有C数组的开销。