在解决Pascal关于Leetcode的三角形问题时,我得到了以下代码的运行时错误:
Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior我确实想出了其他可以工作的代码,但是我想知道为什么我会得到这个代码的错误。
vector<vector<int>> generate(int numRows) {
vector<vector<int>> v(numRows);
vector<int> q;
for(int i=0;i<numRows;i++){
q.resize(i+1);
q[0]=q[i]=1;
for(int j=1;j<i;j++){
q[j]=v[i-1][j-1]+v[i-1][j];
}
v.push_back(q);
q.clear();
}
return v;
}发布于 2022-06-02 17:01:58
使用元素的vector v数构造numRows。然后从0迭代到numRows - 1,在每次迭代中,向vector v的And添加一个新的vector,因此最终得到一个vector,它保存了元素的2 * numRows数,而不是元素的numRows数。
而不是vector<vector<int>> v(numRows);,您应该使用v.reserve(numRows)。这是完整的代码:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> v;
v.reserve(numRows);
vector<int> q;
for(int i=0;i<numRows;i++){
q.resize(i+1);
q[0]=q[i]=1;
for(int j=1;j<i;j++){
q[j]=v[i-1][j-1]+v[i-1][j];
}
v.push_back(q);
q.clear();
}
return v;
}https://stackoverflow.com/questions/72479696
复制相似问题