《高质量C++编程指南:内存管理》学习笔记

内存的三种分配方式:静态存储区分配,栈上分配,堆上分配。

内存使用常见错误

(1)内存分配不成功,却使用它。对策:使用前检查内存是否为NULL。

(2)内存分配成功,但没有初始化就使用它。对策:内存分配后初始化。

(3)内存分配成功且已经初始化,但是越界。对策:做越界检查。

(4)忘记释放内存,造成内存泄漏。对策:内存动态分配和释放必须成双配对。

(5)释放了内存却继续使用它。

(a)对象关系过于复杂,理不清楚究竟释放了没有。

(b)return指向栈内存的指针或引用。

(c)free或delete内存后,没有把指针置为NULL。导致野指针。

指针与数组。数组名对应着(而不是指向)一块内存,在生存期内,其地址不可改变,只能是数组内容改变。

sizeof():

sizeof(数组)= 数组元素个数*sizeof(数组的元素数据类型)。

sizeof(指针)= 4;

数组作为参数传递时,数组名自动退化为指针类型,即sizeof(数组)=4;

sizeof(结构体或者类):这个有点麻烦,和编译器的设置有关系,pragma pack(n)是编译器指定的内存字节对齐方式,sizeof(结构或者类)和pragma pack(n)关系密切,默认的n=8,结构中的成员占用的内存起始地址为成员的数据类型的大小和n相比较的较小值。

指针参数

不要让指针参数在函数体内部申请内存,如果非要指针在函数体内部申请内存,就要用指针的指针。函数的返回值不能使用栈内分配的变量地址。

野指针:用malloc和new 分配了内存,就得用free和delete 释放,否则造成内存泄漏,但是只释放内存还是不够安全的,必须在释放内存后,让指针指向NULL,才不至于造成野指针。我理解的野指针就是没有正确指向的指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值