剑指 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
![](https://img-blog.csdnimg.cn/img_convert/8d628e56eaa48de506b83d5a36d7daf8.png)
代码:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
int m = matrix.size() , n = matrix[0].size();
if(matrix.size()==0 || matrix[0].size()==0) return false;
int i=0 , j=n-1;
while( i<m && j>=0 ){
if(matrix[i][j] == target) return true;
if(matrix[i][j] > target) --j;
else ++i;
}
return false;
}
};
这个测试案例能通过,提交就报错
错误原因:vector数组越界,vector容器在没有分配内存空间之前不可以使用下标访问法!
因为vector有可能为空,因为matrix[0]时出现了数组越界错误。
int m = matrix.size() , n = matrix[0].size();
if(matrix.size()==0 || matrix[0].size()==0) return false;
上面这样判断是否为空也是错误的代码,因为出现了matrix[0];
正确方法应该直接调用C++的empty函数来判断,即在最开始添加如下代码:
if(matrix.empty()) return false;