关于c ++:在哪里创建动态大小数组?

Where are dynamic size arrays created on? (stack or heap)

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

1
2
3
int n;
cin >> n;
int items[n];

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

1
2
3
4
5
int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;

编辑:我理解第二个代码的作用。我在问第一个代码是否和第二个代码做的一样,但是行数更少。


您的第一个示例根本不使用动态数组——它使用的是堆栈分配的可变长度数组(通常在幕后相当于EDCOX1调用1调用),除了EDCOX1(2)操作符之外,这是C99,而不是C++的一个特性。

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


使用new分配内存,因此数组存储在堆中。


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

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

动态=堆。非动态=叠加。

永远记住释放你的记忆!