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

C++ c+中的动态数组+;头文件,c++,dynamic,multidimensional-array,C++,Dynamic,Multidimensional Array,我的cpp项目在头文件中有静态2d数组,但它会导致chkstk错误。我想让它充满活力。是否真的有可能在标题中使用,因为更改项目的所有部分(大约12000行代码)是很困难的 根据,您很可能需要将静态2d数组放入函数中,以便及时初始化它 像这样: double**& my_array() { static double** local = NULL; if(!local) { // init your array here } return local;

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

根据,您很可能需要将静态2d数组放入函数中,以便及时初始化它

像这样:

double**& my_array()
{
  static double** local = NULL;
  if(!local)
  {  
     // init your array here
  } 
  return local;
}
您需要引用数组,如
my\u array()
,而不是代码中的
my\u 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;
}
typedef std::array my_array\t;
my_数组\u t和my_数组()
{
静态my_数组_t local=初始_值();
返回本地;
}
您可以像以前一样使用
my\u array
,使用
my\u array()


即使您不使用C++11,我建议您定义自己的2d_数组类,当您正确编写它时,它对C数组没有任何开销。

double**&
?世界跆拳道联盟?这样的代码不应该由任何正派的程序员创建。@icepack:我同意这很奇怪,请参阅我在更新的答案中的解释。使用singleton模式创建一个类,为您提供数组实例。