C++第二三四周的new与delete

2017-07-11  本文已影响0人  SYSinsight

date: 2017-03-28 20:03:30

一.多维指针的new与delete

  1. 从第一维开始不断循环 自上而下地分配空间:
mat = new int*[row];
    int i = 0;
    for (; i < row; i++) {
        mat[i] = new int[col];
    }

另外,记得在初始化之后才能调用,避免使用野指针。

  1. 自下而上地删除空间
int i = 0;
        for (; i < row; i++) {
            delete[]mat[i];
        }
        delete[]mat;
        mat = NULL;

值得注意的是,为防止野指针产生,在delete一片空间后要记得将其指向NULL

二.二叉树的节点删除中的野指针

if ((z->left == NULL) && (z->right == NULL)) {//z没有子树
        if (z == root) {
            delete root;
            root = NULL;
        }
        else{
            if (y->left != NULL && (y->left)->ele == num){
                delete y->left;
                y->left = NULL;
            }
            else{
                delete y->right;
                y->right = NULL;
            }
        }
    }

上面的z指向要被删除的节点,为什么不直接delete z;z=null;? 因为这样就不方便找到y(z的父节点),进而y的左子树指针或右子树指针不能指向null,就会出现一个野指针。

三.memory check:leak_definitelyLost:

即内存泄露问题,一般为new完未delete,暂时见过:

  1. 多维指针的删除时删除不彻底
  2. 在判断条件前new,例如判断语句后可能直接return,就会忘记delete,要在每一个new时想仔细在哪里delete。
上一篇下一篇

猜你喜欢

热点阅读