当我初始化一个大小为变量的数组时会发生什么?

What happens when I initialize an array having the size as a variable?

我想知道我的数组存储在哪里,如果它具有可变大小,例如在下面的代码中,这是因为在我的教科书中它说在运行时内存被分配给堆,据我所知,但似乎它实际上分配给了堆栈 有人可以澄清堆栈和堆内存分配实际上是如何工作的。

#include<iostream>
using namespace std;

int main(){
int Array_size;
cin >> Array_size;
int array[Array_size];
return 0;
}

你的书错了,或者你看错了。

A Variable-Length Array(少数 C++ 编译器实现的 非标准扩展)总是分配在 自动内存(即,在堆栈上),永远不会在 动态内存 中(即,在堆上)。当数组超出范围时,编译器会回收数组的内存,就像任何其他局部变量一样。

动态内存仅由 the new operator[std::](m|c)alloc() 函数分配。

栈和堆内存有点抽象,所以我理解你的困惑。通常,函数内的任何变量,包括 main,不是动态分配的(即使用 new 声明变量)进入堆栈。如果您声明一个指针,则该指针指向堆上的一个变量,而该指针仍保留在堆栈上。这就是为什么您必须始终使用 delete 清除指针,最好将指针设置为 NULL(如果它不再有用)。压入堆栈的任何变量或函数都会自动弹出(将 push 和 pop 视为插入和移除,这只是正确的术语)。堆上的内存是在运行时手动分配和释放的。希望这能消除一些困惑。