C++博客 :: 首页 :: 联系 ::  :: 管理
  164 Posts :: 4 Stories :: 154 Comments :: 0 Trackbacks

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

内存使用常见错误

(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,才不至于造成野指针。我理解的野指针就是没有正确指向的指针。

posted on 2008-01-18 14:40 sdfasdf 阅读(1209) 评论(4)  编辑 收藏 引用 所属分类: C++

Feedback

# re: 《高质量C++编程指南:内存管理》学习笔记[未登录] 2008-01-18 16:09 jarod
感觉这本书的观点就是程序的效率在于内存管理.但实际却不光是这点.把这一小部份当本书来读,有些浪费时间.  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-01-18 19:19 小不点
"不要让指针参数在函数体内部申请内存,如果非要指针在函数体内部申请内存,就要用指针的指针"
这句话的意思可不可以这样理解->如果在函数体里面分配,由于指针也是按值传递,所以只是在函数体内部被改变了,而函数体外面还没有改变。而参数是指针的指针这时候达到的效果就相当于引用传参,同时也改变了函数外面的值。  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-01-18 20:34 秦歌
yes,我认为你的理解是正确的,我也是这么想的,林锐也是这么解释的!  回复  更多评论
  

# re: 《高质量C++编程指南:内存管理》学习笔记 2008-05-15 21:22 海天
你好:关于学习《高质量C/C++编程指南》的读后感
我看了你的博客,老师要我们交个报告,论文格式,要八张纸,我写不了这么多体会,能否指教你下,帮我写分体会,让我参考下,谢谢了,QQ309461627
chenhongyunan@126.com

  回复  更多评论
  


标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
相关链接:
网站导航: