Я использую График с использованием Edge List в C++. Код исполняется по назначению, но, согласно valgrind, происходит утечка памяти, вызванная функцией AddEdge. Мне трудно понять, что это такое, поскольку AddEdge и AddVertex похожи, но AddVertex не течет.
void Graph::AddVertex(string v)
{
bool full = false;
try
{
VertexNode* location = new VertexNode;
delete location;
full = false;
}
catch(std::bad_alloc exception)
{
full = true;
}
if(full == true)
throw GraphFull();
else
{
VertexNode* temp = new VertexNode;
temp->vname = v;
if (vertices == NULL)
{
vertices = temp;
vertices->nextVertex = NULL;
edges = NULL;
}
else
{
temp->nextVertex = vertices;
vertices = temp;
}
}
}
void Graph::AddEdge(string s, string d, int w)
{
bool full = false;
try
{
EdgeNode* location = new EdgeNode;
delete location;
full = false;
}
catch(std::bad_alloc exception)
{
full = true;
}
if(full == true)
throw GraphFull();
else
{
EdgeNode* temp = new EdgeNode;
temp->weight = w;
VertexNode* search = vertices;
while(search->vname != s)
search = search->nextVertex;
temp->source = search;
search = vertices;
while(search->vname != d)
search = search->nextVertex;
temp->destination = search;
if (edges == NULL)
{
edges = temp;
edges->nextEdge = NULL;
}
else
{
temp->nextEdge = edges;
edges = temp;
}
}
}
вот выход valgrind:
==17435== at 0x4A075BC: operator new(unsigned long) (vg_replace_malloc.c:298)
==17435== by 0x401952: Graph::AddEdge(std::string,std::string,int)(in /home/graph)
==17435== by 0x402255: main (in /home/graph)
Ни AddEdge, ни AddVertex не выпускают какую-либо память, которую они выделяют, поэтому по дизайну проблема вообще не в этих подпрограммах. Ясно, что утечка памяти - это отказ освободить память до закрытия программы. Сообщается только, что память, выделенная конкретной процедурой, остается выделенной при выходе из программы.
Проблема, скорее всего, не во время выделения в AddEdge
, а, скорее, к времени выхода программы, память, выделенная AddEdge
не была выпущена (освобождена).
Вы освободили вершины, но не края?