6

動的メモリ割り当てと静的メモリ割り当てについて読んでいたところ、動的メモリ割り当てについて次のことがわかりました。

前の章で見たプログラムでは、必要な変数を定義することによって、プログラムの実行前にすべてのメモリーの必要性が決定されていました。ただし、プログラムのメモリ ニーズは実行時にしか判断できない場合があります。たとえば、必要なメモリがユーザー入力に依存する場合です。

そこで、C++ で次のプログラムを作成しました。

#include <iostream>

int main()
{
  int n = 0;
  int i = 0;

  std::cout << "Enter size: ";
  std::cin >> n;
  int vector[n];

  for (i=0; i<n; i++)
  {
    vector[i] = i;
  }

  return 0;
}

このプログラムは機能します。仕組みがわかりません。こちらのサイズはいつ決まりますか?この場合、ベクトルはどのように割り当てられますか?

4

2 に答える 2

8

これによると(強調鉱山):

可変長の自動配列は ISO C99 で許可されており、拡張として GCC は C90 モードと C++ でそれらを受け入れます。これらの配列は、他の自動配列と同様に宣言されますが、長さが定数式ではありません。ストレージは宣言の時点で割り当てられ、宣言を含むブロック スコープが終了すると割り当てが解除されます

これは単なる拡張機能であり、すべてのコンパイラで機能するとは限らないことに注意してください。たとえば、MSVC では機能しません (「式には定数値が必要です」というエラーが表示されます)。

于 2018-12-13T10:53:14.670 に答える