[Lemon-user] Memory error in MaxWeightedMatching?
Kovács Péter
kpeter at inf.elte.hu
Fri Dec 9 17:13:13 CET 2011
Hi,
I can't answer the issue you encountered, but I would like to draw your
attention to a LEMON contribution that provides TSP heuristic
implementations, including Christofides' algorithm. You may be
interested in it.
You can find the repository here:
http://lime.cs.elte.hu/~kpeter/hg/hgwebdir.cgi/lemon-tsp/
In particular, you can download christofides_tsp.h from here:
http://lime.cs.elte.hu/~kpeter/hg/hgwebdir.cgi/lemon-tsp/raw-file/dfaf4ebd7d46/lemon/christofides_tsp.h
Currently, these codes are not part of the official LEMON releases, but
they probably will be.
Best regards,
Peter
On 2011.12.08. 20:03, Gereon Kremer wrote:
> Hi,
>
> I'm trying to use the MaxWeightedMatching class. While running the
> program seems to work properly, some errors show up when running the
> code with valgrind. I'm actually implementing a tsp heuristic
> (christofides). below is the error message that valgrind gives me.
>
> ==20368== Memcheck, a memory error detector
> ==20368== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
> ==20368== Using Valgrind-3.6.1-Debian and LibVEX; rerun with -h for
> copyright info
> ==20368== Command: ./main_2.exe
> ==20368==
> ==20368== Conditional jump or move depends on uninitialised value(s)
> ==20368== at 0x4267F5: lemon::ListGraphBase::Arc::operator
> lemon::ListGraphBase::Edge() const (list_graph.h:859)
> ==20368== by 0x42CCBA: lemon::MaxWeightedMatching<lemon::ListGraph,
> lemon::GraphExtender<lemon::ListGraphBase>::EdgeMap<int>
>> ::matching(lemon::ListGraphBase::Edge const&) const (matching.h:1961)
> ==20368== by 0x429C54: TSP::tsp() (tsp.cpp:97)
> ==20368== by 0x402F76: main (main_2.cpp:27)
> ==20368==
> ==20368== Conditional jump or move depends on uninitialised value(s)
> ==20368== at 0x429C57: TSP::tsp() (tsp.cpp:97)
> ==20368== by 0x402F76: main (main_2.cpp:27)
> ==20368==
> ==20368==
> ==20368== HEAP SUMMARY:
> ==20368== in use at exit: 0 bytes in 0 blocks
> ==20368== total heap usage: 142,120 allocs, 142,120 frees, 9,170,970
> bytes allocated
> ==20368==
> ==20368== All heap blocks were freed -- no leaks are possible
> ==20368==
> ==20368== For counts of detected and suppressed errors, rerun with: -v
> ==20368== Use --track-origins=yes to see where uninitialised values come
> from
> ==20368== ERROR SUMMARY: 6190 errors from 2 contexts (suppressed: 4 from 4)
>
> the corresponding part of tsp.cpp looks like this, line 97 being "if
> (m.matching(cur))". this->g is the listgraph I'm working on. p.mst is a
> set of edges that describe an mst on this graph.
>
>
> MaxWeightedMatching<ListGraph, ListGraph::EdgeMap<int>> m(matchg, matchw);
> m.init();
> m.start();
> m.run();
>
> ListGraph eulerg;
> ListGraph::EdgeMap<ListGraph::Edge> eulermap(eulerg);
> ListGraph::NodeMap<ListGraph::Node> eulernodemap(eulerg);
> ListGraph::NodeMap<bool> visited(eulerg);
>
> GraphCopy<ListGraph, ListGraph> copy2(this->g, eulerg);
> copy2.nodeCrossRef(eulernodemap);
> copy2.edgeCrossRef(eulermap);
> copy2.run();
>
> list<ListGraph::Edge> edges;
> for (ListGraph::EdgeIt e(eulerg); e != INVALID; ++e) edges.push_back(e);
>
> for (list<ListGraph::Edge>::iterator it = edges.begin(); it !=
> edges.end(); ++it)
> { // copy edges in matching
> ListGraph::Edge cur = edgemap[eulermap[*it]];
> if (m.matching(cur))
> {
> eulerg.addEdge(eulerg.u(*it), eulerg.v(*it));
> }
> if (p.mst->count(eulermap[*it]) == 0) eulerg.erase(*it);
> }
>
>
> what exactly is wrong with this code?
> (if something is wrong that has nothing to do with the actuall error,
> I'd be happy to hear this too ;-) ).
>
> thanks,
> gereon
> _______________________________________________
> Lemon-user mailing list
> Lemon-user at lemon.cs.elte.hu
> http://lemon.cs.elte.hu/mailman/listinfo/lemon-user
More information about the Lemon-user
mailing list