У меня есть класс графов
struct Graph
{
list<Node *> vertices;
};
int main()
{
Graph g;
// fill out graph
return 0;
}
Я хочу выполнить алгоритм типа Dijkstra-кратчайшего пути.Шаг 1 будет создавать набор из всех узлов, который я выполню с помощью
set<Node *> outstanding;
for (auto itx=g.vertices.begin(); itx!=g.vertices.end(); itx++)
{
outstanding.insert(*itx);
}
Шаг 2 будет извлекать вершину с определенным свойством
double max_height_comp = (*(g.vertices.begin()))->max_height;
set<Node *>::const_iterator it_max;
while (!outstanding.empty())
{
for (auto its=outstanding.begin(); its!=outstanding.end(); its++)
{
if ((*its)->max_height >= max_height_comp)
{
max_height_comp = (*its)->max_height;
it_max = its;
}
}
outstanding.erase(it_max);
Яполучение этих ошибок времени выполнения
malloc: *** error for object 0x7fc485c02de0: pointer being freed was not allocated
malloc: *** set a breakpoint in malloc_error_break to debug
Я боюсь, что erase()
вызывает free()
или delete
для элементов outstanding
, которые являются указателями.Но зачем это делать?Я просто хочу удалить значение указателя из набора, я не хочу удалять данные, на которые указывает указатель.