创建动态大小数组的位置在哪里?(堆栈或堆)

kra*_*mir 2 c++ memory arrays allocation

例如,我有一个基于用户输入的动态大小的数组:

int n;
cin >> n;
int items[n];
Run Code Online (Sandbox Code Playgroud)

这个数组是在堆栈上分配的吗?或者它是否在堆上,如果我写了:

int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;
Run Code Online (Sandbox Code Playgroud)

编辑:我理解第二个代码的作用.我问的是第一个代码是否与第二个代码完全相同,但行数较少.

Ric*_*III 6

你的第一个例子根本就没有使用动态数组 - 它使用的是堆栈分配的可变长度数组(通常在幕后相当于一个alloca调用,除了sizeof运算符),这是C99的一个特性,而不是C++.

当然,你的第二个数组是通过new分配在堆上的.

  • 请注意,标准C++不支持可变长度数组,因此第一个代码片段在C99(没有'iostream`s)和C++(没有VLA)中都是语法错误.然而,一些编译器支持C++中的VLA作为扩展. (6认同)
  • @Miro:使用扩展时,编译器不需要发出警告.在这种情况下,GCC的编译器编写者选择不发出警告(尽管如果编译时启用了所有警告,可能会发出警告). (2认同)