例如,我有一个基于用户输入的动态大小的数组:
int n;
cin >> n;
int items[n];
这个数组是否在堆栈上分配?或者它就像我写的那样在堆上:
int n, *items;
cin >> n;
items = new int[n];
...
delete [] items;
编辑:我理解第二个代码的作用。我问第一个代码是否与第二个代码完全相同,但行数较少。
答案 0 :(得分:6)
您的第一个示例根本没有使用动态数组 - 它使用堆栈分配的可变长度数组(通常在幕后等同于alloca
调用,但{{1}除外}} operator),这是C99的一个特性,而不是C ++。
当然,你的第二个数组是通过new分配在堆上的。
答案 1 :(得分:1)
使用new
分配内存,因此您的数组存储在堆
答案 2 :(得分:-1)
您的第一个代码块将无法编译,您无法在不使用new或malloc / calloc / realloc的内存分配的情况下分配动态大小的数组。
为了做你想做的事,你需要做你在第二个块中所拥有的东西,它将在堆上分配。
动态=堆。非动态=堆栈。
永远记得释放你的记忆!