<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Pointer in map führt zu segfault]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse Node, und eine std::map&lt;string, Node*&gt;. Wenn ich dort Elemente per insert einfüge, und anschließend auf das Node-Objekt zugreifen will, bekomme ich einen segfault, da die Pointer schlichtweg auf 0 stehen.</p>
<p>Ich habe folgenden Code:</p>
<pre><code>Node* node = new Node(source); // string: source
map&lt;string, Node*&gt;::value_type nodePair(source, node);
mymap.insert(nodePair);

// ...

mymap[&quot;foo&quot;]-&gt;getName(); // führt zu segfault, da der value auf 0x0 steht.
</code></pre>
<p>Ich habe dazu folgendes gefunden: <a href="https://stackoverflow.com/questions/10333854/how-to-handle-a-map-with-pointers" rel="nofollow">https://stackoverflow.com/questions/10333854/how-to-handle-a-map-with-pointers</a></p>
<p>Mir ist jedoch noch nicht ganz klar, warum insert nicht den entsprechenden Konstruktor aufruft. Könnte mir jemand nettes hier erklären, was da genau passiert?</p>
<p>Ich habe den Node(string), Node(), Node(const Node&amp;)-Konstruktor, sowie operator(const Node&amp;) mit cout-Anweisungen ausgestattet, jedoch wird bei der insert-Variante nur der normale Node(string)-Konstruktor aufgerufen.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332660/pointer-in-map-führt-zu-segfault</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 16:35:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332660.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 May 2015 10:36:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 10:36:54 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Klasse Node, und eine std::map&lt;string, Node*&gt;. Wenn ich dort Elemente per insert einfüge, und anschließend auf das Node-Objekt zugreifen will, bekomme ich einen segfault, da die Pointer schlichtweg auf 0 stehen.</p>
<p>Ich habe folgenden Code:</p>
<pre><code>Node* node = new Node(source); // string: source
map&lt;string, Node*&gt;::value_type nodePair(source, node);
mymap.insert(nodePair);

// ...

mymap[&quot;foo&quot;]-&gt;getName(); // führt zu segfault, da der value auf 0x0 steht.
</code></pre>
<p>Ich habe dazu folgendes gefunden: <a href="https://stackoverflow.com/questions/10333854/how-to-handle-a-map-with-pointers" rel="nofollow">https://stackoverflow.com/questions/10333854/how-to-handle-a-map-with-pointers</a></p>
<p>Mir ist jedoch noch nicht ganz klar, warum insert nicht den entsprechenden Konstruktor aufruft. Könnte mir jemand nettes hier erklären, was da genau passiert?</p>
<p>Ich habe den Node(string), Node(), Node(const Node&amp;)-Konstruktor, sowie operator(const Node&amp;) mit cout-Anweisungen ausgestattet, jedoch wird bei der insert-Variante nur der normale Node(string)-Konstruktor aufgerufen.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453568</guid><dc:creator><![CDATA[Dudu42]]></dc:creator><pubDate>Fri, 15 May 2015 10:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 10:38:55 GMT]]></title><description><![CDATA[<p>Musst du unbedingt Pointer auf Node speichern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453570</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 15 May 2015 10:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 10:43:22 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Musst du unbedingt Pointer auf Node speichern?</p>
</blockquote>
<p>Ja, leider. Ist eine Vorgabe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453571</guid><dc:creator><![CDATA[Dudu42]]></dc:creator><pubDate>Fri, 15 May 2015 10:43:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 10:43:43 GMT]]></title><description><![CDATA[<p>Eigentlich gibt der StackOverflow Artikel dazu auch etwas. Denn jede Antwort da hinterfragt, warum Pointer genutzt werden anstatt von Objekten.</p>
<p>Ausser die letzte Antwort, die schlägt die Ptr_Container von Boost vor, in dem Fall die boost::ptr_map.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453572</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 15 May 2015 10:43:43 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 10:50:06 GMT]]></title><description><![CDATA[<p>Wie gesagt, Node als Pointer ist eine Vorgabe der Aufgabe (der Uni). Ich würde das grundsätzlich anders machen, aber irgendwie mögen Professoren es nicht, wenn man die Vorgaben ändert -- selbst wenn sie schlichtweg dämlich sind.</p>
<p>Ich möchte nur verstehen, warum bei einem insert der Pointer nicht kopiert wird. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":\"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453574</guid><dc:creator><![CDATA[Dudu42]]></dc:creator><pubDate>Fri, 15 May 2015 10:50:06 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 11:07:01 GMT]]></title><description><![CDATA[<p>Wenn beim []-Operator der Eintrag in der Map noch nicht existiert, dann wird der Standardwert dafür eingetragen (bei einem Zeiger also der Nullpointer).</p>
<p>Wenn du explizit abfragen möchtest, ob der Wert in der Map schon existiert, dann benutze <a href="http://www.cplusplus.com/reference/map/map/find/" rel="nofollow">map::find</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453576</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 15 May 2015 11:07:01 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 11:17:47 GMT]]></title><description><![CDATA[<p>Der Eintrag existiert ja; ich habe mir mit gdb anzeigen lassen, wie das aussieht:</p>
<pre><code>(gdb) p dg.nodeMap
$1 = std::map with 17 elements = {[&quot;Bad_Essen&quot;] = 0x0, [&quot;Bad_Iburg&quot;] = 0x0, [&quot;Bissendorf&quot;] = 0x0, [&quot;Borgholzhausen&quot;] = 0x0, [&quot;Bramsche&quot;] = 0x0, [&quot;GMH&quot;] = 0x0, [&quot;Glandorf&quot;] = 0x0, [&quot;Ibbenbueren&quot;] = 0x0, 
  [&quot;Ladbergen&quot;] = 0x0, [&quot;Lengerich&quot;] = 0x0, [&quot;Melle&quot;] = 0x0, [&quot;Neuenkirchen&quot;] = 0x0, [&quot;Osnabrueck&quot;] = 0x0, [&quot;Osterkappeln&quot;] = 0x0, [&quot;Osterkappen&quot;] = 0x0, [&quot;Wallenhorst&quot;] = 0x0, [&quot;Westerkappeln&quot;] = 0x0}
</code></pre>
<p>Das Erstellen des Eintrags ist möglich, jedoch wird der Pointer nicht übernommen, wenn ich per insert einfüge. Wenn ich per</p>
<pre><code>nodeMap[source] = new Node(source)
</code></pre>
<p>einfüge, dann geht's.</p>
<p>Ich will einfach nur verstehen, warum insert hier so anders funktioniert und den Zeiger nicht mitkopiert. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453577</guid><dc:creator><![CDATA[Dudu42]]></dc:creator><pubDate>Fri, 15 May 2015 11:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 11:34:22 GMT]]></title><description><![CDATA[<p>Ach... Jetzt fällt mir was auf:</p>
<p>ich nutze zuvor if(nodeMap[source] == 0) um zu überprüfen, ob das Element existiert. Damit wird es erzeugt, der Pointer auf 0 gesetzt und entsprechend funktioniert insert nicht mehr, weil der Index schon besteht.</p>
<p>Ich hätte über eure Antwort mehr nachdenken sollen. Danke!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453578</guid><dc:creator><![CDATA[Dudu42]]></dc:creator><pubDate>Fri, 15 May 2015 11:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer in map führt zu segfault on Fri, 15 May 2015 12:12:04 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2453579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2453579</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 15 May 2015 12:12:04 GMT</pubDate></item></channel></rss>