动态内存管理

1、动态内存在申请后,有一个开头标志,其中存放长度信息,有一个结尾标志,有利于碎片内存拼接,苹果公司在内存管理部分做的比其他公司好,所以苹果看起来内存小,当到后期也不卡。

2、内存中常见的3中错误:

(1)越界,将尾部信息篡改

int *p=(int*)malloc(10)//申请10个字节

for(int i=0;i<10;i++)

{

p[i]=0;//崩溃,越界

}

(2)移动指针,指针不在指向首地址,所以系统找不到开头标志,不知道多少个格子。这样遇到free(p)就崩溃

int*p=(int*)malloc(10*sizeof(int))

for(int i=0;i<10;i++)

{

 *(p+i)=0;//*p=0;p++;

}

free(p);//崩溃,找不到首地址

(3)重复释放内存

int *p=(int*)malloc(10*sizeof(int))

for(int i=0;i<10;i++)

{

p[i]=0;//动态内存初始化为0

}

free(p);

free(p);//崩溃,已经释放,没有可再次释放的内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值