Chinaunix首页 | 论坛 | 博客
  • 博客访问: 655585
  • 博文数量: 150
  • 博客积分: 4070
  • 博客等级: 中校
  • 技术积分: 1795
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-23 21:44
文章分类

全部博文(150)

文章存档

2012年(1)

2011年(123)

2010年(26)

分类: C/C++

2011-06-14 15:46:38

一、内存分配方式
   1. 从静态存储区域分配。内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在。例如全局变量、static变量,常量字符串。
   2. 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。分配的内存容量有限。
   3. 从堆上分配,也称为动态分配。程序在运行的时候用malloc或new申请内存,然后利用free或delete释放内存。分配比较灵活。
 
二、常见的内存错误
   1. 内存未分配成功,却使用了它。如果p为指针,可以通过 if(p != NULL)来判断后续操作是否执行。
   2. 内存分配成功,但是未初始化却使用它。
   3. 内存分配成功并且已经初始化,但是操作越过了内存的边界。这种情况经常发生在数组的下标操作中。
   4. 忘记释放内存,造成内存泄露。
   5. 释放了内存,却仍然使用它。
    (1)函数的return语句写错了,不要返回指向栈内存的指针或引用。
    (2)使用了free或delete后,却没有把指针置为NULL,产生野指针。
 
三、有了malloc/free为什么还要new/delete?
    malloc/free是C++/C语言的标准库函数。而new/delete是C++的运算符。它们都用于动态申请内存和释放内存。对于非内部数据类型的对象而言,只使用malloc/free无法满足条件,因为对象在创建的同时要自动执行构造函数,对象在消亡时要执行析构函数。
阅读(1016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~