[Lemon-user] Issue with ListDigraph::NodeMaps
Marco Blanco
blanco at zib.de
Mon Jun 19 16:43:13 CEST 2017
Dear Lemon Team,
unfortunately, we could not reproduce the error in a small example, and
our code is too big and dependent on several files and local settings to
include. Below is the constructor for the Query2D object, I hope that
helps...
Kind regards,
Marco
Query2D::Query2D(const Graph2D& g2D) :
_bg(&g2D),
G(g2D.G),
_settled(G,0),
_id(G, std::numeric_limits<size_t>::max() ),
_nodeType(G,0)
_potential(G,0)
{};
Am 14.06.2017 um 08:37 schrieb Péter Kovács:
> Dear Marco,
>
> Could you send a self-contained code example for reproducing the
> issue? I miss e.g. the implementation of the constructor of Query2D
> (where constructors of the node maps should be called).
>
> Regards,
> Péter
>
>
>
>> Dear Lemon-Team,
>>
>> I've run across a problem with your ListDigraph::NodeMapswhich I can't
>> solve on my own.
>>
>> Unfortunately, as the code is rather intricate, I find myself unable to
>> provide a minimal example, but the simplified structure is as follows:
>> The function testcreates a Graph2Dwith an underlying
>> lemon::ListDigraphobject and calls a shortestPathwrapper. This
>> shortestPathfunction creates a Query2Dobject, which knows the underlying
>> ListDigraph, and keeps a few NodeMaps(see below). The first three
>> NodeMapsnever caused an issue, but when I implemented the fourth one
>> called _potential, the destructor of Graph2Dthrows a segfault. Note that
>> none of the destructors are implemented by me, I use the standard
>> implicit destructors.
>>
>> In the attached valgrind output, I could trace the segfault down to the
>> clear()function in alteration_notifier.h -- yet, as three
>> NodeMapsalready exist and seemingly work fine, I'm at a loss as to why
>> this segfault occurs. I'm grateful for any support you can provide!
>>
>> Regards,
>> Marco
>>
>>
>> void test(const Problem& problem)
>> {
>> Graph2D g2D(problem);
>> g2D.shortestPath("from","to");
>> }
>>
>> class Graph2D
>> {
>> public:
>> Graph2D(const Problem& problem);
>> lemon::ListDigraph G;
>>
>> void shortestPath(const std::string& from, const std::string& to)
>> lemon::ListDigraph::Node getNode(const std::string& name);
>> }
>>
>> void Graph2D::shortestPath(const std::string& from, const
>> std::string& to)
>> {
>> Query2D query(*this);
>>
>> lemon::ListDigraph::Node s = getNode(from);
>> lemon::ListDigraph::Node t = getNode(to);
>>
>> query.run(s,t);
>> }
>>
>>
>> class Query2D
>> {
>> public:
>> Query2D(const Graph2D& g2D);
>>
>> const Graph2D* const _bg;
>> const lemon::ListDigraph& G;
>>
>> void run(lemon::ListDigraph::Node s, lemon::ListDigraph::Node t);
>>
>> /** The following three NodeMaps have been here for a long time and
>> never caused any issues */
>> lemon::ListDigraph::NodeMap<short> _settled;
>> lemon::ListDigraph::NodeMap<size_t> _id;
>> lemon::ListDigraph::NodeMap<short> _nodeType;
>>
>> /** This map causes trouble. If left in, it causes the attached
>> SIGSEGV (even though it is never used after initialisation!), if
>> commented out, everything works nice and smooth */
>> lemon::ListDigraph::NodeMap<double> _potential;
>> }
>>
>>
>> _______________________________________________
>> Lemon-user mailing list
>> Lemon-user at lemon.cs.elte.hu
>> http://lemon.cs.elte.hu/mailman/listinfo/lemon-user
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lemon.cs.elte.hu/pipermail/lemon-user/attachments/20170619/ed50de5d/attachment.html>
More information about the Lemon-user
mailing list