Ошибка double free or corruption (out) Aborted, как исправить?

#include <vector>
#include <algorithm>
#include <iostream>

using namespace std;

int index(vector<int> a,int b)
{
    for(int i=0;i<a.size();i++)
    {
        if(a[i]==b)
        {
            return i;
        }
    }
    return -1;
}

int main() {
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n;
    cin>>n;
    vector<int> len(n);
    vector<int> inds(n);
    for(int i=0;i<n;i++)
    {
        inds[i]=i;
    }
    vector<int> res(n);
    for(int i=0;i<n;i++)
    {
        cin>>len[i];
    }
    vector<int> price(n);
    for(int i=0;i<n;i++)
    {
        cin>>price[i];
    }
    while(len.size()!=0)
    {
        int ml=-1;
        for(int i=0;i<len.size();i++)
        {
            if(len[i]>ml)
            {
                ml=len[i];
            }
        }
        int mp=10001;
        for(int i=0;i<price.size();i++)
        {
            if(price[i]<mp)
            {
                mp=price[i];
            }
        }
        int mli=index(len,ml),mpi=index(len,mp);
        len.erase(len.begin()+mli);
        price.erase(price.begin()+mpi);
        res[inds[mli]]=mpi+1;
        inds.erase(inds.begin()+mli);
    }
    for(auto i=res.begin();i!=res.end();i++)
    {
        cout<<*i<<" ";
    }
}

Вот код. При компилировании выходит такая ошибка, что делать
  • Вопрос задан
  • 545 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Вы никакого free и даже delete или new в программе не делаете. Значит ошибка в том, что структуры менеджера памяти как-то портятся. Это значит, что вы пишите куда-то за границы массива.

Можно попытаться запустить программу в отладчике, или добавить кучу отладочного вывода, чтобы посмотреть, что и как вы портите.

Подозреваю, что ошибка тут:
int mli=index(len,ml),mpi=index(len,mp);
Обратите внимание на второй вызов index. Вы ищите в массиве len значение mp, которое вы нашли в массиве price. Возможно оно возвращает -1 и дальше уже вы пытаетесь что-то делать в векторе по этому индексу, что вряд ли закончится хорошо.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы