当我初始化了尺寸为变量数组会发生什么?

问题描述 投票:0回答:2

我想知道的是存储在我的数组,其中如果有可变的大小,例如在下面这个代码是因为在我的书,它说的是运行时内存中被分配到堆到我的理解,但似乎它实际分配给堆栈可有人澄清栈和堆内存分配的实际工作。

#include<iostream>
using namespace std;

int main(){
int Array_size;
cin >> Array_size;
int array[Array_size];
return 0;
}
c++ dynamic stack heap variable-length-array
2个回答
1
投票

你的书是错误的,或者你误读了。

Variable-Length Array(一个非标准扩展由少数C ++编译器实现的)总是在自动存储器分配(即,在堆栈上),从来没有在动态存储器(即,在堆上)。数组的内存是由编译器,当阵列超出范围,就像任何其他局部变量回收。

动态内存只被分配the new operator,或由[std::](m|c)alloc()功能。


0
投票

栈和堆内存都有点抽象,所以我理解你的困惑。一般情况下,内部的功能,包括主要的任何变量,没有被动态分配(即声明使用新变量)进入堆叠。如果你声明的指针,该指针指向堆上的一个变量,而指针仍然在堆栈中。这就是为什么你必须始终明确使用删除,最好是将指针设置为NULL,如果没有更多的使用指针。被压入堆栈的任何变量或函数会自动弹出(想推的和流行的插入和移除,它只是正确的术语)。在堆上分配内存和手动和运行时重新分配。希望这清除了一些混乱。

© www.soinside.com 2019 - 2024. All rights reserved.