2023年11月29日发(作者:)
LeetCode报错:Line1034:Char9
报错信息:Line 1034: Char 9: runtime error: reference binding to null pointer of type ‘std::vector
(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
class Solution {
public:
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> temp;
ans[0]={};//
这样的赋值⽅式是错误的
for(int i=0;i<nums.size();i++){
int last_ans_size=ans.size();
for(int j=0;j<last_ans_size;j++){
temp=ans[j];
temp.push_back(nums[i]);
ans.push_back(temp);
}
}
return ans;
}
};
错误分析:ans初始化后可能为空,直接⽤下标索引的话会导致空指针错误nullptr。
⽤vs跑这个代码会发⽣vector越界错误,验证了上述的错误分析。
int main() {
vector<vector<int>> ve;
ve[0] = {};//
错误
cout << ve.size() << endl;
cout << ve[0].size();
return 0;
}
正确的赋值⽅式应为
int main() {
vector<vector<int>> ve;
ve.push_back({});//
正确的赋值⽅式
ve[0] = { 1 };//veve[0]
给赋值后就可以⽤下标访问了
cout << ve.size() << endl;
cout << ve[0].size();
return 0;
}


发布评论