lc中heap-use-after-free的一种情况

在做 lc114. 二叉树展开为链表 时遇到。当时代码写到一半,如下:

class Solution {
public:
    TreeNode* lastNode;
public:
    void backtrack(TreeNode* node){
        if(node != NULL){
            if(lastNode -> left == NULL) lastNode -> left = node;
            // cout< val<<" ";
            lastNode = node;
            backtrack(node -> left);
            backtrack(node -> right);
        }        
    }
    void flatten(TreeNode* root) {
        lastNode = new TreeNode(0);
        backtrack(root);
        // cout< val<<" "<<"end";
    }
};

代码本身没有问题,有问题的是leetcode的代码
这是说,出现溢出的不是我们写的代码,而是lc对我们隐藏的代码,这部分代码可能做了输入初始化,输出等等操作。由于我们的代码数据结构有一些不完善的地方,或者无法适配隐藏的代码操作的地方,才会报错。
我这里的问题在lc中很常见,就是树的某棵子树应该为空,但没有置为NULL

你可能感兴趣的:(数据结构)