1

プログラムで大きなサイズの配列が必要です。

私のコードには 3 つの float 型変数を含む構造があり、この構造の大きなサイズの 3 次元配列が必要です。
私のコードは小さなサイズの配列の出力を提供していますが、配列のサイズを大きくすると、スタック オーバーフローの例外/エラーが発生します。

助けてください。

4

4 に答える 4

3

それ以外の

int main() {
   float array[N][N][N][N][N];
   ...

書きます

float array[N][N][N][N][N];

int main() {
   ...

または、次のように記述します。

int main() {
   static float array[N][N][N][N][N];
   ...

ところで: VC10/Win32 での私の既定の設定では、最大 990 KB のスタック割り当てが可能N=12です。

よろしく

rbo

于 2012-06-13T17:22:52.043 に答える
2

ここでのソリューションは ですstd::vector。スタックよりもはるかに大きいヒープにメモリを割り当て、余分な労力をまったくかけずにサイズを変更できます。

typedef std::vector<float> vec;
typedef std::vector<vec> vec2D;
typedef std::vector<vec2D> vec3D;
typedef std::vector<vec3D> vec4D;
typedef std::vector<vec4D> vec5D;

vec5D d (15, vec4D (15, vec3D (15, vec2D (15, vec (15)))));
//use as you would a normal array for the most part

もちろん、(コメントで「必要」と述べられているように) 5D 配列を持つことは、特に必要なものではありません。Matrix代わりに、基礎となる 1D ベクトルを持つ種類のクラスを作成することをお勧めします。

さらに良いことに、デザインを再考してください。そのような非常に多次元の配列が実際に必要になることはめったにありません。

于 2012-06-13T17:32:43.343 に答える
1

ヒープに割り当てるだけでなく、/Fまたは/STACKオプションを使用するか、プロジェクトのプロパティで、より大きなスタックを予約することもできます。

ここに画像の説明を入力

于 2012-06-13T17:21:52.067 に答える
0

必要かどうかはわかりませんが、必要に応じて、リンカーオプションを使用してデフォルトのスタックサイズを変更できます。たとえば、VisualStudioで[プロパティ]-[構成プロパティ]-[リンカー]-[システム]-[スタック予約サイズ]に移動します。

于 2012-06-13T17:20:20.563 に答える