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

来源:互联网 发布:怎样应聘淘宝客服 编辑:程序博客网 时间:2024/05/08 11:02

转载
 分类: 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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 注册游戏账号时乱输入的邮箱怎么办 yy频道解邦不能开直播怎么办 淘宝的淘金币快过期了怎么办 乐透啦彩票让骗了6万怎么办 交了认筹金不能进抢购平台怎么办 爱奇艺会文学会员办了想退款怎么办 海淘信用卡入账但是砍单怎么办 褐色分泌物流了好几天了怎么办? 淘宝买的衣服一直不发货怎么办 从国外寄东西到国内被税了怎么办 百度网盘上传文件数量有限制怎么办 腾讯视频上传文件过限制大小怎么办 三星s7打网页又卡又慢怎么办 路由器的上网账号和口令忘了怎么办 小米笔记本移动热点连接不上怎么办 移动宽带密码重置后认证失败怎么办 移动光纤不记得账号和密码怎么办? 宽带为什么交了钱还是不能用怎么办 小孩被虎牙直播诱导支付了款怎么办 房间里4g网络信号差怎么办 移动4g网络信号不满格怎么办 大风号无法上传视频暂停服务怎么办 过了竞牌保证金交付时间怎么办 亚马逊产品上架后货物没到怎么办 工行企业网银证书过期了怎么办 海淘转运地址国家填错了怎么办 集装箱实重与申报重量不一样怎么办 微博复制的淘口令找不到了怎么办 买了移动手机不能用联通卡怎么办 移动手机用联通卡网速慢怎么办 移动手机插联通卡没反应怎么办 移动手机办了联通大王卡怎么办 qq被冻结但是有至尊宝怎么办 qq被冻结了有至尊宝怎么办 移动电话卡注销了里面的钱怎么办 罗麦的oa上经理喜报没截图怎么办 工行融e联登录密码忘了怎么办 融e借有额度秒拒怎么办 工行银行柜台办理融e借怎么办 地球末日生存破解版金币没了怎么办 手机被别人骗走了里面的微信怎么办