青青的博客分享 http://blog.sciencenet.cn/u/qingqing3721 青青的程序世界

博文

C++内存分配方式及常见错误

已有 1840 次阅读 2011-4-6 03:13 |系统分类:科研笔记

  1、内存分配方式  内存分配方式有三种:  (1)从静态存储区域分配。 例如全局变量, 函数执行结束时这些存储单元自动被释放。 效率很高, 但是分配的内存容量有限。   (3)从堆上分配, 亦称静态内存分配。 顺序在运行的时分用malloc或new申请恣意多少的内存, 顺序员本人担任在何时用free或delete释放内存。 静态内存的生存期由我们决议, 使用非常灵敏, 但效果也最多。   2、罕见的内存错误及其对策  发作内存错误是件非常麻烦的事情。 编译器不能自动发现这些错误, 时隐时现, 有时用户怒喜洋洋地把你找来, 顺序却没有发作任何效果, 你一走, 错误又发作了。   编程老手常犯这种错误, 因为他们没有意识到内存分配会不成功。 假如是用malloc或new来申请内存, 应该用if(p==NULL)或if(p!=NULL)进行防错处置。 但是尚未初始化就援用它。   犯这种错误主要有两个原因:一是没有初始化的观念;二是误以为内存的缺省初值全为零, 导致援用初值错误(例如数组)。   内存的缺省初值终究是什么并没有统一的标准, 虽然有些时分为零值, 所以无论用何种方式创建数组, 都别忘了赋初值, 即便是赋零值也不可省略,   内存分配成功并且已经初始化, 但操作越过了内存的边界。   例如在使用数组时经常发作下标“多1”或许“少1”的操作。 循环次数很容易搞错, 导致数组操作越界。   遗忘了释放内存, 形成内存泄露。   含有这种错误的函数每被调用一次就丢失一块内存。 终有一次顺序忽然死掉, 系统出现提示:内存耗尽。   静态内存的申请与释放必须配对, 顺序中malloc与free的使用次数一定要相反, 否则肯定有错误(new/delete同理)。   释放了内存却继续使用它。   有三种状况:  (1)顺序中的对象调用关系过于复杂, 此时应该重新设计数据构造, 从基本上解决对象管理的混乱局面。   (2)函数的return语句写错了, 因为该内存在函数体结束时被自动销毁。 没有将指针设置为NULL。 导致发生“野指针”。   【规则1】用malloc或new申请内存之后, 防止使用指针值为NULL的内存。   【规则3】防止数组或指针的下标越界, 特别要当心发作“多1”或许“少1”操作。   【规则5】用free或delete释放了内存之后,

https://blog.sciencenet.cn/blog-559014-430049.html

上一篇:Delphi教程推荐
下一篇:C++类构造函数初始化列表
收藏 IP: 117.21.220.*| 热度|

0

发表评论 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-29 07:46

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部