Я выполняю задачу Leetcode 281. Зигзагообразный итератор, и я получаю ошибку во время выполнения, которая, по-видимому, не дублируется на моем локальном компьютере.
Мой код
class ZigzagIterator {
public:
ZigzagIterator(vector<int>& v1, vector<int>& v2) : v1{v1}, v2{v2}, it1{v1.begin()}, it2{v2.begin()}, first{false} {
}
int next() {
int val{0};
if(first || it1 == v1.end()) {
val = *it2;
it2++;
first = false;
}
else
{
val = *it1;
it1++;
cout << (it1 == v1.end()) << " " << *it1 << endl;
first = true;
}
return val;
}
bool hasNext() {
return (it1 != v1.end() || it2 != v2.end());
}
private:
// const vector<int> &v1;
// const vector<int> &v2;
vector<int> v1;
vector<int> v2;
std::vector<int>::iterator it1;
std::vector<int>::iterator it2;
bool first;
};
int main()
{
vector<int> v1{1,2};
vector<int> v2{3,4,5,6};
ZigzagIterator i(v1, v2);
while (i.hasNext()) cout << i.next();
}
Ошибка времени выполнения:
AddressSanitizer: heap-buffer-overflow on address 0x602000000038 at pc 0x0000003843a6 bp 0x7ffeea8b3b50 sp 0x7ffeea8b3b48
Я вставил оператор печати в условие else next()
. На втором отпечатке (it1 == v1.end())
должен быть равен true
, но, похоже, он равен false
на leetcode и true
на моей локальной машине. У меня где-нибудь есть ошибка кода?