赞
踩
网上搜了一下这个报错,是指释放地址后又使用堆,刚开始困惑了几分钟,我这二叉树的题怎么还扯到堆了(x
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root==NULL) return NULL;
root->right = mirrorTree(root->left);
root->left = mirrorTree(root->right);
return root;
}
};
还是不太清楚我这个代码中报错的细节(学艺不精),然后如下的代码中,我应该是因为在改变了root->left之后又使用了root->left
改成下面之后就ok了
class Solution {
public:
TreeNode* mirrorTree(TreeNode* root) {
if(root==NULL) return NULL;
TreeNode* p = mirrorTree(root->left);
TreeNode* q = mirrorTree(root->right);
root->left = q;
root->right = p;
return root;
}
};
LeetCode 使用AddressSanitizer检查是否存在内存非法访问,出现该报错信息说明应该时存在数组越界风险,着重检查模拟数组下标访问时的极限情况是否会越界。
本人遇到这个报错多半是数组定义array[size]后访问了array[size],需要注意地址范围是0~size-1。
例:
//二分查找
int column1 = 0, column2 = grid.size()//此处忘记-1,导致后续数组访问时出错;
while(column1<column2){
int mid = (column2 + column1)/2;
if(grid[mid][0]>=0)
column1 = mid + 1;
else column2 = mid;
}
同样是数组越界的问题,检查下标,是否会出现-1的情况。
很好理解,引用了空指针,主要排查哪一步是否用到了空指针的左孩子、右孩子之类的,如下例:
class Solution {
public:
bool isValidBST(TreeNode* root) {
if(root==NULL) return true;
if(root->left->val>=root->val||root->right->val<=root->val)
return false;
else return isValidBST(root->left)&&isValidBST(root->right);
}
};
没有判断root->left和root->right是否为空,就使用它们的val。
我是出错在定义vector<bool> used的时候没有声明大小和初值,后面直接使用具体的used[i]时报错。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。