c++ - 我正在解决 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;
}
};
解决方案
这里
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())
推荐阅读
- c++ - 制作动态调整大小的数组 C++ 时内存分配中的分段错误
- mysql - MAMP - MySQL 无法运行
- wordpress - 无法在 wordpress 5.8.1 中访问 woocommerce rest api
- reporting-services - SSRS 日历日期/时间参数问题
- matrix - 在 C++ 示例代码中将矩阵左侧旋转 90 度
- javascript - 如何从获取 POST 响应中获取特定的嵌套值?
- android - 反应原生应用程序未安装在android虚拟设备上
- javascript - 如何根据复选框显示表格行
- python - 散点图中的超链接点 - matplotlib
- regex - 条件格式:间接引用的多个条件