2023年11月29日发(作者:)

LeetCode报错:Line1034Char9

报错信息: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;

}