c/c++内存释放应注意的问题

1 篇文章 0 订阅
  分类: C /C
C/C++程序运行时的内存结构:
(1)全局变量、用static修饰的局部变量都存储在静态数据区
(2)程序指令和大部分字面常量都存储在代码区
(3)大部分函数的形参和局部变量都存储在栈区
(4)程序中动态分配的内存都存储在堆区
(5)一小部分函数形参和局部变量存储在CPU寄存器组中

使用malloc和free的注意事项:
(1)刚刚分配的动态内存的初始值是不确定的
(2)不能对同一指针(地址)连续两次进行free操作
(3)不能对指向静态存储区(全局变量)或内存区局部变量)的指针应用free(但可以对空指针NULL应用
free)
(4)对一个指针应用free之后,它的值不会改变,但它指向了一个无效的内存区,这时称该指针为“悬
空指针”
(5)如果没有及时释放某块动态内存,并且将指向它的指针指向了别处,就会造成“内存泄露”
(6)执行malloc和free含糊有一定的代价,所以对于较小的变量不应该放在动态内存之中,并且尽量避
免频繁的分配和释放动态内存

使用堆内存时的常见错误:
(1)内存分配未成功,却使用了它
(2)内存分配虽然成功,但是尚未初始化就引用它。(误认为初始值为0)
(3)内存分配成功并且已经初始化,但操作越过了内存的边界
(4)忘记了释放内存,造成了内存泄露
(5)释放了内存却继续使用它

关于悬空指针:
(1)一个指针变量,如果不为NULL且没有指向有效的内存地址,都称为“悬空指针”
(2)通过悬空指针访问其指向的内存区会使程序产生不可预知的错误

如何避免悬空指针:
(1)定义指针变量时检查对其进行正确的初始化
(2)在用free或delete释放内存之后,应及时将相应的指针置为NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值