美文网首页
C++第二三四周的new与delete

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

作者: SYSinsight | 来源:发表于2017-07-11 14:16 被阅读0次

    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。

    相关文章

      网友评论

          本文标题:C++第二三四周的new与delete

          本文链接:https://www.haomeiwen.com/subject/xyqmhxtx.html