c++ - 如何修复leetcode中的“运行时错误:引用绑定到'value_type'(stl_vector.h)类型的空指针”?
问题描述
我正在做 leetcode 376. Wiggle 子序列。测试输入 [1,7,4,9,2,5] 的第一个实例时出错。它显示“第 922 行:字符 34:运行时错误:引用绑定到类型为 '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
while 它具有 size的元素0
。
如果你想给flag[i]
你写信,首先需要有一个i
th 元素flag
。如果您事先知道,您可以通过调整flag
所需长度来实现这一点。在您的情况下,您似乎将拥有确切的length-1
元素,因此您可以这样做
flag.resize(length-1);
或者,如果您将声明移到 of 之后length
,您可以直接使用std::vector
s 构造函数来执行此操作:
std::vector<int> flag(length-1);
或者,您可以使用push_back
在向量末尾插入元素,如果您只是按顺序编写新元素,就像您在这里所做的那样,例如,而不是flag[i] = 1;
:
flag.push_back(1);
推荐阅读
- xamarin.forms - 无法从 Xamarin 表单应用程序生成发布版本
- oracle - 引用在 plsql 中未正确终止
- java - 如何从用户输入中打印一个单词
- google-cloud-platform - Google 计算引擎无法通过 nat 代理使用外部 IP 访问
- laravel - Laravel 5.5 如果 url 具有某种结构,则不要使用路由
- java - 使用反应式 Java WebSocket 客户端订阅特定主题
- javascript - 画布上下文 putImageData:由于浏览器优化导致的数据丢失
- python - 在保留颜色的同时将 3 通道 16 位图像转换为 8 位
- arrays - MASM 中的字符数组
- c++ - 为什么我的程序运行时 cdrom 不能完全读取 cdrom?