在哪里创建动态大小数组?(堆叠或堆)

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

本文关键字:数组 创建 动态 小数 在哪里      更新时间:2023-10-16

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

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

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

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

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

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

第二个数组当然是通过new.

在堆上分配的。

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

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

为了做你想做的事情,你需要做你在第二个块中所做的事情,它将始终分配在堆上。

Dynamic = Heap。非动态= Stack.

永远记得释放你的内存!