Похоже, проблема в следующем коде:
void List_graph::add_connection(int source, int target, int weight)
{
Node* newNode = get_adj_list_node(target, head[source],weight);
head[source] = newNode;
Node_number++;
}
Обратите внимание, что если head[source]
уже заполнено, вы растоптываете этот указатель, теряете его навсегда и выделяете утечки.
Исправление: delete
сначала:
void List_graph::add_connection(int source, int target, int weight)
{
Node* newNode = get_adj_list_node(target, head[source],weight);
delete head[source];
head[source] = newNode;
Node_number++;
}
Теперь в другом коде:
Node* List_graph::get_adj_list_node(int dest,Node * head,int weight)
{
// ...
return new_node;
delete [] new_node;
}
Линия delete
никогда не запускает , и это тоже хорошо, потому что вы саботируете только что сделанное выделение, и это также неправильный тип delete
для использования.