2

私はC++プログラミングに本当に慣れていないので、私のばかげた質問を許してください。

私は次のような配列を持っています:

double myarray [15][20000]; // Works ok but stack overflow error if I change 15 to about 200

私はこのようなことを達成したいと思います:

double myarray [total][20000];

次に、実行時に、ユーザーにtotalの値を入力してもらいます。

cin>>total

これを達成する方法と、これを解決してスタックオーバーフローを回避するためのベストプラクティスについてアドバイスしてください。

ありがとう。

4

1 に答える 1

4

vectorのを使用vector:

int total;

cin >> total;

//                                      (1)                        (2)
std::vector<std::vector<double>> myVec(total, std::vector<double>(20000));
// (1) is the first dimension and (2) is the second dimension

そして、それらを配列のように使用でき、スタック オーバーフローが発生しません。

myVec[0][4] = 53.24;
cout << myVec[0][4];

また、必要に応じてその場で大きくすることもできます。

スタックは通常非常に小さく、大きすぎる配列を割り当てようとしているため、スタック オーバーフローが発生しています。vectorフリーストアで動的に割り当てられたメモリを使用します。通常ははるかに大きく、オーバーフローエラーは発生しません。

また、C++ では、静的配列のサイズをコンパイル時に知る必要があるため、数値を読み取ってそれを使用することはできませんが、vectors を使用すると実行時にサイズを変更できます。

于 2012-05-01T19:26:41.083 に答える