3

たとえば、ユーザー入力に基づいた動的サイズの配列があります。

int n;
cin >> n;
int items[n];

このアレイはスタックに割り当てられていますか?または、私が書いたようにヒープ上にありますか?

int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;

編集:私は2番目のコードが何をするかを理解しています。最初のコードが2番目のコードと同じことを実行するかどうかを尋ねていますが、行数は少なくなっています。

4

3 に答える 3

7

最初の例では、動的配列をまったく使用していません。スタックに割り当てられた可変長配列(通常alloca、演算子を除いて、舞台裏では呼び出しと同等です)を使用していますsizeof。これは、C99の機能であり、 C++。

もちろん、2番目の配列はnewを介してヒープに割り当てられます。

于 2013-03-16T19:27:20.027 に答える
2

メモリの割り当てに使用するnewため、配列はヒープに格納されます

于 2013-03-16T19:26:17.440 に答える
-1

コードの最初のブロックはコンパイルに失敗します。newまたはmalloc/calloc / reallocのいずれかでメモリ割り当てを使用せずに、動的サイズの配列を割り当てることはできません。

必要なことを実行するには、常にヒープに割り当てられる2番目のブロックにあることを実行する必要があります。

動的=ヒープ。非動的=スタック。

常にあなたの記憶を解放することを忘れないでください!

于 2013-03-16T19:27:32.057 に答える