У меня есть цикл, который удаляет графы Графа в списке смежности. Это выглядит следующим образом:Доступ к значению итератора вызывает segfault 11
void Graph::removeEdge(int a, int b)
{
vector<int>::iterator it = adjList[a].begin();
while(*it != b) it++;
adjList[a].erase(it);
it = adjList[b].begin();
while(*it != a) it++;
adjList[b].erase(it);
}
После нескольких попыток, я получаю Segmentation fault: 11
ошибку. Это вызвано доступом к *it
. Что может быть причиной, как это исправить?
Подробнее:
// This is my structure
vector<int> *adjList;
Graph::Graph(int V)
{
this->V = V;
adjList = new vector<int>[V];
clear();
}
Вы не проверяете, указывает ли итератор на 'adjList.end()', поэтому это может быть причиной segfault. – EdChum
Предположительно, один из векторов не содержит элемент, который вы ищете, поэтому вы итерация прошла мимо конца. Вам будет лучше использовать 'std :: find'. – TartanLlama
Являются ли индексы 'a' и' b' действительными в 'adjList'? –