Как следующий код.Я встречаю двойную свободную ошибку, когда я стираю свой вектор в C++
Я хочу переместить элемент в векторе обратно.
например: [(1), 2,3,4] -> [2,3,4, (1)]
Но, это может вызвать двойной бесплатно проблему. Логика в этом коде проста.
Я думаю, что неправильно использую функцию стирания. Это правда? Кто-нибудь скажет мне подробности?
Спасибо за ваше чтение.
Это вывод:
*** Error in '/home/ubuntu/workspace/hello-cpp-world.cc.o': double free or corruption (out): 0x00000000016ffca0 ***
Это фрагмент кода:
#include <iostream>
#include <vector>
int main() {
std::vector<int*> targets;
int* a = new int;
*a = 1;
int* b = new int;
*b = 2;
targets.push_back(a);
targets.push_back(b);
int i =0;
for (std::vector<int*>::iterator obj1 = targets.begin(); obj1 != targets.end(); i++)
{
if(i==0)
{
int* tmp = *obj1;
targets.push_back(tmp);
targets.erase(obj1);
}
else obj1++;
}
}
Спасибо за ваш ответ. Но одно я не понимаю. Вы говорите, что 'Invoking push_back или erase to std :: vector может аннулировать итераторы. '. Но я пытаюсь удалить 'push_back' или' erase'. Оно работает. Не могли бы вы сказать, почему эти две линии не могут существовать одновременно? –
@ Шаун Хуан читает документацию ['pushback'] (http://en.cppreference.com/w/cpp/container/vector/push_back) и [' erase'] (http://en.cppreference.com/w/cpp/container/vector/erase) может помочь. –
@bkVnet спасибо. Я буду проверять больше случаев, когда итератор недействителен. –