gpt4 book ai didi

c++ - 如何在 leetcode 中修复 "runtime error: reference binding to null pointer of type ' value_type' (STL_vector.h)”?

转载 作者:行者123 更新时间:2023-11-28 01:18:40 32 4
gpt4 key购买 nike

我正在做 leetcode 376. Wiggle Subsequence。测试输入 [1,7,4,9,2,5] 的第一个实例时出错。它显示“第 922 行:字符 34:运行时错误:引用绑定(bind)到‘value_type’类型的空指针 (STL_vector.h)”。谁能告诉我出了什么问题?非常感谢!

class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if(nums.size() < 2){
return nums.size();
}
std::priority_queue<int> big_heap;
vector<int> flag;
int result;
int length = nums.size();
for(int i = 0; i + 1 < length; i++){
if(nums[i+1] > nums[i]){
flag[i] = 1;
}
else if(nums[i+1] < nums[i]){
flag[i] = -1;
}
else{
flag[i] = 0;
}
}
int count = 1;
for(int i = 0; i + 2 < length;i++){
cout <<flag[i]<<endl;
if(flag[i] + flag[i+1] == 0){
count ++;
}
else{
big_heap.push(count);
count = 1;
}
}
big_heap.push(count);
result = big_heap.top() + 1;
return result;

}
};

最佳答案

您有未定义的行为,因为您正在访问 flag 的元素,而它的大小为 0

如果你想写入flag[i],你首先需要在flag中有一个i元素。如果您事先知道,您可以通过将 flag 的大小调整为所需的长度来实现此目的。在你的情况下,你似乎有 length-1 元素,所以你可以做

flag.resize(length-1);

或者如果您将声明移动到 length 之后,您可以直接使用 std::vector 的构造函数来执行此操作:

std::vector<int> flag(length-1);

或者,您可以使用 push_back 在 vector 的末尾插入元素,如果您只是按顺序编写新元素,就像您在这里所做的那样,例如而不是 flag[i] = 1;:

flag.push_back(1);

关于c++ - 如何在 leetcode 中修复 "runtime error: reference binding to null pointer of type ' value_type' (STL_vector.h)”?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57720160/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com