堆,栈问题
int *a,n;cin>>n;
a=new int;是什么意思?
是创立了一个指针数组a吗? 首先,int *a; a这个指针是为NULL的,相当于a = 0x00000000;当new int后,程序会在堆中分配一个大小为sizeof(int) * 4大小的空间,并将这个空间的首地址给到a ,这时的a = 0x00200000什么的(一般情况下)。不会随函数的结束而释放。除非是整个进程结束。
而int a; 这个是在栈中分配的,其地址一般为0x00180000什么的,这个会在函数结束时被释放掉。 new是一个关键字,用来手动在内存空间中开辟一块区域,区域的大小由int决定
一般new需要和delete配合使用,因为是手动申请的空间,需要自己手动释放
而栈是系统自动分配的空间,能够自动完成分配、使用、释放的过程
页:
[1]