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