问题:
做的题目是剑指offer 04.二维数组中的查找
Line 1033: Char 9: runtime error: reference binding to null pointer of type 'std::vector<int, std::allocator<int>>' (stl_vector.h) SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/stl_vector.h:1043:9
在leetcode执行代码页面,执行没有出错。一旦提交代码就报了上面的错误,如下图1-1 所示:
图1-1 数组越界问题
从图1-1可以看出,最后执行输入的是空数组,而我的代码如下图1-2:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
// 因为二维数组从左到右都是依次递增,从上到下依次递增,从左下角依次查找
int n = matrix.size() - 1;
int m = matrix[0].size();
int x = n, y = 0;
while (x >= 0 && y < m) {
if (matrix[x][y] > target) {
x--;
}else if (matrix[x][y] < target) {
y++;
}else {
return true;
}
}
return false;
}
};
图1-2 原始代码
编译执行没有问题,如下图1-3:
图1-3 执行成功
解决方法:
仔细观察图1-1,发现是数组越界问题,对于在空数组的处理的时候出现了问题,回顾代码查看,发现
int n = matrix.size() - 1;
int x = n;
x >= 0;
以上的代一些代码,当数组为空数组的时候n为-1,这时候显然数组越界了。所以加上对空数组的判断就行了,如下代码:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.empty()) {
return false;
}
// 因为二维数组从左到右都是依次递增,从上到下依次递增,从左下角依次查找
int n = matrix.size() - 1;
int m = matrix[0].size();
int x = n, y = 0;
while (x >= 0 && y < m) {
if (matrix[x][y] > target) {
x--;
}else if (matrix[x][y] < target) {
y++;
}else {
return true;
}
}
return false;
}
};
每次的小九九
感谢相遇,陌生人!祝你好运