reference binding to null pointer of type 'int' (stl_vector.h)
首先给大家抛出一个error:
Line 1034: Char 9: runtime error: reference binding to null pointer of type '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
产生原因:
1.对于一些stl和一些数据结构掌握不准确;
2.缺少判断条件(导致数组下标越界);
这是在做leetcode题遇到的排序问题,我写了一个归并排序
class Solution {
public:
vector<int> s;
void merge_sort(int l,int r,vector<int>& nums){
if(l>=r)return;
int mid=(l+r)>>1;
merge_sort(l,mid,nums),merge_sort(mid+1,r,nums);
int i=l,j=mid+1,t=0;
while(i<=mid && j<=r){
if(nums[i]<=nums[j])s[t++]=nums[i++];
else s[t++]=nums[j++];
}
while(i<=mid) s[t++]=nums[i++];
while(j<=r) s[t++]=nums[j++];
for(int i=l,j=0;i<=r;i++,j++){
nums[i]=s[j];
}
}
void sortColors(vector<int>& nums) {
merge_sort(0,nums.size()-1,nums);
}
};
作者:全都是你
链接:https://leetcode.cn/circle/discuss/WvKolR/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.这个算法本身没有问题,错误原因是没有对s数组分配空间,导致数组下标越界,出现错误
原来以为的是vector是动态数组,不需要额外申请空间。其实是需要的,因为后边有是s[t++],是需要有数组下标的。
那么如何申请空间那:vactor<int>s(100,0) 100为申请的空间数,0为每一个空间存储的数,即这一百个数都为零。
2.对于vector数组为空的情况也要判断,如果不判断,也会出现报错。
所以要加一行代码:if (s.size()==0) return;
总结
这类错误多数是因为在编程的过程中由于一些判断或者初始化的细节没有考虑到,解决很简单,但是很容易被忽略,所以家人们遇到这种报错就可以想一想是不是数组下标越界,或者没有对数组分配空间,以及加判断非空条件