int*array = new int [n]; 这个功能究竟在做什么?

pau*_*ago 18 c++ arrays pointers new-operator

我对如何创建动态定义的数组感到困惑:

 int *array = new int[n];
Run Code Online (Sandbox Code Playgroud)

我不知道这是做什么的.我可以告诉它创建一个指向数组的指针指向一个新的对象/数组int?有人会关心解释吗?

ANi*_*sus 20

new分配存储您请求的对象/数组所需的内存量.在这种情况下n个int.

然后指针将地址存储到该内存块.

但是要小心,这个分配的内存块在你通过编写告诉它之前不会被释放

delete [] array;
Run Code Online (Sandbox Code Playgroud)


Naw*_*waz 9

int *array = new int[n];
Run Code Online (Sandbox Code Playgroud)

它声明了一个指向类型int和大小的动态数组的指针n.

更详细的答案:new分配大小等于sizeof(int) * n字节的内存并返回由变量存储的内存array.此外,由于内存是使用动态分配的new,因此您需要通过编写手动解除分配(当然,当您不再需要时):

delete []array;
Run Code Online (Sandbox Code Playgroud)

否则,您的程序将泄漏至少sizeof(int) * n字节的内存(可能更多,具体取决于实现使用的分配策略).

  • @Nawaz C++语言的参考是C++标准,而不是你编写的一些代码,偶然碰巧支持你的断言. (6认同)
  • @unapersson,虽然它可能_allocate_更多的内存,你不能使用任何额外的,而不调用未定义的行为.因此,就你而言,你应该假设你只有_exactly_你所要求的.你遇到问题的唯一一次是你做了很多小额分配,以免造成浪费. (3认同)
  • 不,它不会将内存初始化为零.而`array`实际上是指向`int`的指针,而不是指向数组的指针.内存泄漏至少是你提到的大小,但它可能很容易变大. (2认同)

aeo*_*eon 8

该声明基本上做了以下事情:

  1. 创建一个'n'个元素的整数数组
  2. 在使用new运算符创建指针时,在进程的HEAP内存中分配内存
  3. 返回有效地址(如果在执行此语句时可用的所需大小的内存分配)