Line 1034: Char 34: runtime error: applying non-zero offset 4 to null pointer (stl_vector.h)
当创建一个大小为 n+1 的 std::vector 时,每个元素都会被初始化为 int 的默认值,即 0。时就指定它的大小,才能保证有足够的空间来存储元素。在C++中, std::vector。
·
报错代码:
class Solution {
public:
int climbStairs(int n) {
if(n<=2) return n;
vector<int>dp;
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
这个错误信息是说试图对一个空的vector应用非零的偏移量。这个问题出在使用 dp[i]
之前没有为 dp
分配足够的空间。
在C++中, std::vector
的初始大小为0,如果试图访问或修改不存在的元素(如 dp[1]
或 dp[2]
),这就会导致运行时错误。
需要先调用 std::vector::resize
或者在创建 std::vector
时就指定它的大小,才能保证有足够的空间来存储元素。
修改dp初始化:vector<int>dp(n+1)
即可。不规定初始值的话,所有元素都默认是0。
class Solution {
public:
int climbStairs(int n) {
if(n<=2) return n;
vector<int>dp(n+1); //不写初始值的话,默认全都是0
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
};
当创建一个大小为 n+1 的 std::vector 时,每个元素都会被初始化为 int 的默认值,即 0。 std::vector 的构造函数会用默认值填充新创建的元素。
更多推荐
已为社区贡献2条内容
所有评论(0)