c ++头文件中的动态数组

时间:2012-12-16 06:58:34

标签: c++ dynamic multidimensional-array

我的cpp项目在头文件中有静态2d数组但导致chkstk错误。我想让它充满活力。是否真的可以在标题中进行操作,因为更改项目的所有部分(大约12000行代码)很困难。

1 个答案:

答案 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数组的开销。