https://leetcode.cn/problems/find-largest-value-in-each-tree-row/solution/
非常简单的一个bfs,但是提交时一直遇到编译器heap-use-after-free报错。
vector<int> largestValues(TreeNode* root) {
vector<int> res;
if(root==nullptr){
return res;
}
queue<TreeNode*> q;
q.push(root);
while(q.size()>0){
int times=q.size();
int thisMax=q.front()->val;
for(int i=0;i<times;i++){
auto& n=q.front();
q.pop();
thisMax=max(n->val,thisMax);
if(n->left!=nullptr){
q.push(n->left);
}
if(n->right!=nullptr){
q.push(n->right);
}
}
res.push_back(thisMax);
}
return res;
}
找了半天bug,无果。直到看到了别人类似的经历才发现问题所在。
看起来没啥问题,其实问题出在这里。。
auto& n=q.front();
q.pop();
如果我去掉&,或者把pop( )放到n用完之后,就不会出现heap-use-after-free报错。
应该是运行时pop( )之后直接把q.front( )这个指针释放了。。导致n变成了空指针。如果去掉&的话是复制了一个指针,所以不会被q.front( )影响到。
c++里debug真是太难了。
Comments | NOTHING