Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)

Char 9: runtime error: reference binding to null pointer of type 'int' (stl_vector.h)

我在 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;     
}

您使用 numRows 个元素构造 vector v。然后你从 0 迭代到 numRows - 1 并且在每次迭代中,你添加一个新的 vectorvector v,所以你最终得到一个 vector 持有 2 * numRows 个元素而不是 numRows 个元素。

您应该使用 v.reserve(numRows) 而不是 vector<vector<int>> v(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;
}