[学习笔记]内存申请和释放

Posted on 2010-02-11 14:43  Jophoenix  阅读(764)  评论(0编辑  收藏  举报

1)内存申请,申请完成后,一定要检查是否申请成功。

char *p = NULL;

p = (Type*) malloc(sizeof(Type) * length);

if(NULL == p) return;

2) 内存释放,释放完成后,一定要将指针置为 NULL

if(NULL != p)

{

    free(p);

    p = NULL;

}

3) 杜绝"野指针"

定义是要赋初始值NULL,释放后要置为NULL,同时,注意指针的使用范围(程序域/文件域/函数域/代码块域)

4)用new/delete来进行动态对象的内存管理,因为在用new创建对象时,会调用对象的构造函数;在用delete释放对象时,会调用对象的析构函数。而malloc/free则不能执行对象的构造和析构函数。

5)malloc/free

a.malloc 原型: void * malloc(size_t size);

int *p = (int *) malloc(sizeof(int) * length);

在使用的时候,要注意用sizeof来计算要申请的空间大小。

b.free原型:void free( void * memblock );

free(p);

p=NULL; //###这个很重要

6) new/delete

a. int *p2 = new int[length]; //动态申请int型数组

用new动态申请对象,可以使用无参构造函数,也可以使用有参构造函数。

A *pa = new A; 或  A *pa = new A(20);

b. 释放动态对象: delete pa;

    释放动态数组: delete []pa;

7) 申请指针后,要初始化。初始化时,要注意申请空间的大小,谨防多1少1的问题。使用指针时,要注意空指针和无效指针。使用完成后,要释放指针,同时将指针置为NULL。记住谁申请,谁使用,谁释放。

17加油!