【linux】c++ 内存管理(三)

来源:互联网 发布:中国数据域名管理平台 编辑:程序博客网 时间:2024/05/21 14:02

5.杜绝野指针

      “野指针”不是NULL指针,是指向“垃圾”内存的指针。野指针的成因:

      (1)指针变量没有被初始化,任何指针变量刚刚被创建的时候不会自动成为NULL指针。它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应该被初始化,要么将指针设置成NULL,要么让它指向合法的内存。如:

       char *p = NULL;

       char *str = (char *)malloc (100);

     (2)指针p被free或delete之后,没有置为NULL,让人误以为p是个合法的指针。

     (3)指针操作超越了变量的作用范围。

      class A

      {

             public:

             void Func ( void )

             {

                  cout << "Func of class A" << endl;

             }

      }  

      void Test ( void )

      {

             A *p;

             {

                  A a;

                  p = &a; // 注意a的生命周期

             }

             p->Func(); // p是野指针

      }

 

      函数Test在执行语句p->Func(); 时,对象a已经消失,而p是指向a的,所以p就成了"野指针"了。

 

6.内存耗尽怎么办?

      如何在申请动态内存时找不到足够大的内存块,malloc和new将返回NULL指针,宣告内存申请失败。通常有三种方式处理"内存耗尽"问题。

(1)

(2)

(3)