c++ 关于vector容器开辟空间问题

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;

总结

这类错误多数是因为在编程的过程中由于一些判断或者初始化的细节没有考虑到,解决很简单,但是很容易被忽略,所以家人们遇到这种报错就可以想一想是不是数组下标越界,或者没有对数组分配空间,以及加判断非空条件

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值