3

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

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

这个数组是在堆栈上分配的吗?还是像我写的那样在堆上:

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

编辑:我了解第二个代码的作用。我在问第一个代码是否与第二个代码做同样的事情,但行数更少。

4

3 回答 3

7

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

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

于 2013-03-16T19:27:20.027 回答
2

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

于 2013-03-16T19:26:17.440 回答
-1

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

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

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

永远记得释放你的记忆!

于 2013-03-16T19:27:32.057 回答