Ошибка сегментации с list.push_back - PullRequest
0 голосов
/ 13 февраля 2019

Я застрял на баге, который, кажется, исправляется выше моего уровня знаний.

Код представляет собой алгоритм для взлома задачи интервьюирования в области кодирования 04_07.В которой мы должны выяснить структуру зависимостей проектов.

В качестве структуры данных я использую вектор списков с целыми числами: vector<list<int>>

Доступ к элементам после нажатия - это нормально.Но когда я делаю это позже, я получаю ошибку сегментации в deps.at(i).push_back(-1).

Помощь очень ценится :) Я особенно не понимаю, так как я не использую никаких указателей или ручного управления памятью.

Вот полный код всей программы:

int projects = 6;
vector<list<int>> deps;

for(int i=1; i<=projects; i++)
{
    list<int> l;
    deps.push_back(l);
}

deps[4].push_back(1);
deps[2].push_back(6);
deps[4].push_back(2);
deps[1].push_back(6);
deps[3].push_back(4);

for(auto c: deps)
    cout << c.back() << endl;

vector<int> buildOrder;

while(buildOrder.size() < projects)
{
    for(int i = 1; i <= projects; i++)
    {
        if(deps[i].size() == 0)
        {
            buildOrder.push_back(i);

            deps.at(i).push_back(-1);


            for(int j=1; j <= projects; j++)
            {
                list<int>::iterator iter = find(deps[j].begin(), deps[j].end(), i);
                if(iter != deps[j].end()) deps[j].erase(iter);
            }

        }
    }
}

for(int p : buildOrder) cout << p << " ";
cout << endl;
...