Обработка указателя в векторе C ++ - PullRequest
0 голосов
/ 04 мая 2019

Проблемы с использованием вектора в C ++.Следующий код имеет это Ошибка времени выполнения:

* Ошибка в `./a.out ': двойное освобождение или повреждение (out): 0x0000000001e5d050 * === Backtrace: ===.,.

Я написал этот код.

    int main(){
    vector<int> ve; 
    int n;
    cin>>n;
    for(int i=1; i<n+1; i++)ve.push_back(i);
    int last, sec_last, ans; 
    while(!(ve.empty())){
        ans = ve.back();  
        last = ve.back(); 
        ve.pop_back();
        sec_last = ve.back();
        ve.pop_back();
        ve.push_back(last + sec_last + last*sec_last);
    }
    cout<<"\nline 20\n";
    cout<<ans<<"\n";
    cout<<"\nline 22\n";

    }

Пожалуйста, объясните мне, что означает эта ошибка, и как я могу ее исправить ...

1 Ответ

0 голосов
/ 04 мая 2019

«Обратный вызов / pop_back для пустого контейнера не определен» - Интернет

Хотя условие цикла предотвращает вас только один раз, пока вектор ve не будет снова изменен с помощью pop_back.В этом случае существует вероятность того, что вектор пуст, и вызов back для пустого вектора, скорее всего, приведет к падению.

  while(!(ve.empty())){
        ans = ve.back();  
        last = ve.back(); 
        ve.pop_back();        // <---- Vector could become empty
        sec_last = ve.back(); // <---- If vector is indeed empty, then undefined behavior
        ve.pop_back();
        ve.push_back(last + sec_last + last*sec_last);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...