首页 > 解决方案 > 我正在解决 passcal 的三角形问题,在实现我的逻辑后,我遇到了这个错误

问题描述

第 1034 行:字符 9:运行时错误:引用绑定到类型为“int”的空指针 (stl_vector.h) 摘要: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>> generate(int numRows) {
        vector<vector<int>> r(numRows);
        for(int i = 0 ; i < numRows ; ++i){
            for(int j = 0 ; j <= i ; ++j){
                if(j == 0){
                    r[i][j] = 1;
                }
                else if(j == r[i].size()-1){
                    r[i][j] = 1;
                }
                else r[i][j] = r[i-1][j-1] + r[i-1][j];
            }
        }
        return r;
    }
};

标签: c++arrays

解决方案


这里

vector<vector<int>> r(numRows);

您初始化r为向量的numRows向量。内部向量是默认构造的,因此是空的。如果您希望内部向量也具有大小numRows,则必须调整它们的大小或相应地初始化它们,然后才能访问它们的元素:

std::vector<std::vector<int>> r( numRows, std::vector<int>(numRows) );

PS:这是潜在的危险:

else if(j == r[i].size()-1)

size()返回一个无符号并且当r[i]为空时r[i].size() -1环绕到最大值size_t。这在您当前的代码中不是问题(一旦您有正确大小的内部向量),但最好使用此条件:

else if( j+1 == r[i].size())

推荐阅读