堆和栈

:通常存放局部变量、函数参数等,编译器自动分配内存,自动清除。向下、向低地址方向增长。是连续的内存区。

变量引用容易逃逸。

堆:new分配的内存块,程序员释放(delet),存放的是实体(对象)。向上、向高地址方向增长。不连续的内存区(系统用链表存储空间内存地址),容易产生memory leak。大量的new/delet会造成内存空间的不连续。

 

存放在栈中的情况:

int n;    

int *n;

char str[]="safsdf";

char *s="asdfasdf";

 

使用malloc函数分配堆内存:

分配100个int类型的空间:

int *p;

p = (int *)malloc( sizeof(int) * 100 );

 

free之后要将指针置为空

仅仅将指针free掉会使得指针变为野指针它的地址仍然不变,只是该地址对应的内存是垃圾,不把它置为NULL,会误以为是一个合法的指针,如下所示:

char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是p 所指的地址仍然不变

if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值