Marth 发表于 2017-12-12 16:33:37

堆,栈问题

int *a,n;
cin>>n;
a=new int;是什么意思?
是创立了一个指针数组a吗?

上善若水··· 发表于 2017-12-12 16:48:46

首先,int *a; a这个指针是为NULL的,相当于a = 0x00000000;当new int后,程序会在堆中分配一个大小为sizeof(int) * 4大小的空间,并将这个空间的首地址给到a ,这时的a = 0x00200000什么的(一般情况下)。不会随函数的结束而释放。除非是整个进程结束。
而int a; 这个是在栈中分配的,其地址一般为0x00180000什么的,这个会在函数结束时被释放掉。

BngThea 发表于 2017-12-12 16:52:40

new是一个关键字,用来手动在内存空间中开辟一块区域,区域的大小由int决定
一般new需要和delete配合使用,因为是手动申请的空间,需要自己手动释放

而栈是系统自动分配的空间,能够自动完成分配、使用、释放的过程
页: [1]
查看完整版本: 堆,栈问题