我理解在C ++中调用new相当于在C中调用malloc,并且在调用free时可以释放malloc函数返回的指针。通过调用'new'int [length]获得的数组存储在堆中。但是,如果静态数组如int x [3] = {1,2,3};被宣布?这样的数组将存储在哪里?栈?
答案 0 :(得分:2)
静态数组(在全局范围或命名空间中声明)将放置在数据段中。 在函数作用域内声明的局部数组将放在堆栈上。
int g_global_array[2] = {4,5,6}; //Data Segment
int main() {
int local_array[3] = {1,2,3}; //Stack
static int s_static = 10; //Also in the Data Segment (static)
return 0;
}
(与普通老C相同)
答案 1 :(得分:1)
是的,以这种方式声明的本地数组将存储在堆栈中并具有固定的长度。
答案 2 :(得分:1)
堆栈中寻址本地数组。有一个恒定的大小,不能增加。 如果在数组中写入的值多于它可以包含的值,则会出现所谓的堆栈溢出。在他们的领域后面,有其他值的记忆,然后将被覆盖。 Visual Studio会创建一些保护字节以避免这种情况。