我的 cpp 项目在头文件中有静态二维数组,但它导致 chkstk 错误。我想让它动态化。是否真的可以在标题中进行更改,因为对项目的所有部分(大约 12000 行代码)进行更改是很困难的。
问问题
1270 次
1 回答
0
根据Dietmar 对类似问题的回答,很可能您需要将静态二维数组放入一个函数中,以便及时对其进行初始化。
像这样:
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()
.
即使您不使用 C++11,我建议您定义自己的 2d_array 类,无论如何,当您正确编写它时,它不会超过 C 数组的开销。
于 2012-12-16T07:47:05.840 回答