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

时间:2013-03-16 19:24:32

标签: c++ arrays memory allocation

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

int n;
cin >> n;
int items[n];

这个数组是否在堆栈上分配?或者它就像我写的那样在堆上:

int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;

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

3 个答案:

答案 0 :(得分:6)

您的第一个示例根本没有使用动态数组 - 它使用堆栈分配的可变长度数组(通常在幕后等同于alloca调用,但{{1}除外}} operator),这是C99的一个特性,而不是C ++。

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

答案 1 :(得分:1)

使用new分配内存,因此您的数组存储在堆

答案 2 :(得分:-1)

您的第一个代码块将无法编译,您无法在不使用new或malloc / calloc / realloc的内存分配的情况下分配动态大小的数组。

为了做你想做的事,你需要做你在第二个块中所拥有的东西,它将在堆上分配。

动态=堆。非动态=堆栈。

永远记得释放你的记忆!