1

関数を終了したときにその値を保持する関数に配列が必要です。たとえば、

 int func(int x)
 {
  static int arr[5];
 } 

しかし問題は、事前に配列のサイズがわからないことです (つまり、x に依存します)。したがって、「new」を使用して配列を宣言する必要があります。

このようにできますか?

 static int *arr=new int[x];

または私はしなければなりませんか:

  static int *static arr = new int[x]

そうでない場合、それを行う方法は?

4

2 に答える 2

2

static int *arr = new int[x];大丈夫です。ただし、良い点がないのでメモリリークを気にする必要がありますdelete [] arr;

コメントで説明されているように、static std::vector<int> arr;デストラクタはプログラムの最後に自動的に呼び出されるため、ローカルが優先されます。

于 2012-09-18T13:29:09.693 に答える
0

私はそれが合法だとは思わない。変数を使用して関数スコープ内の配列を「動的に」サイズ変更できる理由は、配列がスタックに置かれるためです。

void foo(int x)
{
   int bar[x]; // this is legal
} // but goes out-of-scope here :-(

配列を宣言すると、staticこれが破棄されます。このように考えてください: リンカは配列のサイズを知る機会がないため、配列の「外」に何かを見つけることはできません (明らかに望ましくありません)。

したがって、基本的には と を介してヒープを使用する必要がありnewますdelete。またはstd::vector<>、すでに提案されているように使用することをお勧めします(内部でヒープを使用します)。

于 2012-09-18T13:28:16.643 に答える