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

我不认为那是合法的。您可以使用变量在函数范围内“动态”调整数组大小的原因是 AFAIK,因为数组被放入堆栈:

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 回答