0

私の cpp プロジェクトには、ヘッダー ファイルに静的な 2 次元配列がありますが、chkstk エラーが発生します。ダイナミックにしたい。プロジェクトのすべての部分(約12000行のコード)を変更するのは難しいので、ヘッダーで行うことは本当に可能ですか?

4

1 に答える 1

0

同様の問題に関するDietmarの回答によると、おそらく静的2D配列を関数に入れて、時間内に初期化する必要があります。

このような:

double**& my_array()
{
  static double** local = NULL;
  if(!local)
  {  
     // init your array here
  } 
  return local;
}

my_array()コードではなく、のように配列を参照する必要がありmy_arrayます。

編集:

アイスパックの質問については、ええ、それはかなり奇妙に見えます(私の考えでは、マルチ配列はとにかくクラスにラップする必要があり、そうすればこれは起こりません)。この奇妙なリターンタイプを使用する理由は次のとおりです。

// 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 に答える