Утечка памяти в графической функции C ++ (valgrind не определен в строке)

0

Я использую График с использованием 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)
  • 0
    Вы скомпилировали с -g?
Теги:
memory-leaks
graph

1 ответ

1
Лучший ответ

Ни AddEdge, ни AddVertex не выпускают какую-либо память, которую они выделяют, поэтому по дизайну проблема вообще не в этих подпрограммах. Ясно, что утечка памяти - это отказ освободить память до закрытия программы. Сообщается только, что память, выделенная конкретной процедурой, остается выделенной при выходе из программы.

Проблема, скорее всего, не во время выделения в AddEdge, а, скорее, к времени выхода программы, память, выделенная AddEdge не была выпущена (освобождена).

Вы освободили вершины, но не края?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню