<?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[Kann das hier einen Segfault verursachen?]]></title><description><![CDATA[<p>Ich bekomme einen Segmentation Fault. Ich habe eine Vermutung woran es liegen könnte. Ich habe zwei boost::unordered_map Objekte. Die sehen so aus:</p>
<pre><code class="language-cpp">typedef boost::unordered_map&lt;uint32_t, request*, boost::hash&lt;uint32_t&gt; &gt; map;
map connections;
typedef boost::unordered_map&lt;std::string, webpage*, boost::hash&lt;std::string&gt; &gt; webpage_map;
webpage_map webpages;

void methode() {
webpages.clear();

std::vector&lt;uint32_t&gt; connections_marked_for_deletion;

//... hier werden Objekte aus der Map &quot;connections&quot; zum Löschen markiert die aus irgendwelchen Gründen nicht mehr gültig sind

	//Lösche die Einträge aus der Connections Map
	for( unsigned int i = 0; i &lt; connections_marked_for_deletion.size(); ++i )
		connections.erase( connections_marked_for_deletion.at(i) );

//Rest manipuliert weder connections noch webpages map
}
</code></pre>
<p>Okay, in connections werden Pointer auf auf Objekte vom Typ request gespeichert. Wenn ich jetzt ein erase mache, wird dann auch wieder der Speicher unter diesem Pointer wieder freigegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270931/kann-das-hier-einen-segfault-verursachen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 18:02:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270931.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Jul 2010 14:21:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 14:21:30 GMT]]></title><description><![CDATA[<p>Ich bekomme einen Segmentation Fault. Ich habe eine Vermutung woran es liegen könnte. Ich habe zwei boost::unordered_map Objekte. Die sehen so aus:</p>
<pre><code class="language-cpp">typedef boost::unordered_map&lt;uint32_t, request*, boost::hash&lt;uint32_t&gt; &gt; map;
map connections;
typedef boost::unordered_map&lt;std::string, webpage*, boost::hash&lt;std::string&gt; &gt; webpage_map;
webpage_map webpages;

void methode() {
webpages.clear();

std::vector&lt;uint32_t&gt; connections_marked_for_deletion;

//... hier werden Objekte aus der Map &quot;connections&quot; zum Löschen markiert die aus irgendwelchen Gründen nicht mehr gültig sind

	//Lösche die Einträge aus der Connections Map
	for( unsigned int i = 0; i &lt; connections_marked_for_deletion.size(); ++i )
		connections.erase( connections_marked_for_deletion.at(i) );

//Rest manipuliert weder connections noch webpages map
}
</code></pre>
<p>Okay, in connections werden Pointer auf auf Objekte vom Typ request gespeichert. Wenn ich jetzt ein erase mache, wird dann auch wieder der Speicher unter diesem Pointer wieder freigegeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929192</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Tue, 20 Jul 2010 14:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 14:23:58 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Okay, in connections werden Pointer auf auf Objekte vom Typ request gespeichert. Wenn ich jetzt ein erase mache, wird dann auch wieder der Speicher unter diesem Pointer wieder freigegeben?</p>
</blockquote>
<p>Nein.</p>
<p>Ansonsten: Debugger? Damit findest du schließlich sofort raus, wo der Fehler liegt und musst nicht rumraten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929194</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 20 Jul 2010 14:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 14:25:10 GMT]]></title><description><![CDATA[<p>Hi.<br />
Sollte:</p>
<pre><code class="language-cpp">for( unsigned int i = 0; i &lt; connections_marked_for_deletion.size(); ++i )
        connections.erase( connections_marked_for_deletion.at(i) );
</code></pre>
<p>nicht so aussehen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">for(vector&lt;deintyp&gt;::iterator it = onnections_marked_for_deletion.begin(); it != connections_marked_for_deletion.end(); )
        it = connections.erase(it);
</code></pre>
<p>Iteratoren sind was Feines <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: <strong>Ich habe nichts gesagt</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929195</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Tue, 20 Jul 2010 14:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 14:34:51 GMT]]></title><description><![CDATA[<p>Das heißt also, dass ich für jedes request objekt, das ich eigentlich löschen will, immernoch ein seperates delete aufrufen muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929203</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Tue, 20 Jul 2010 14:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 15:35:01 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Das heißt also, dass ich für jedes request objekt, das ich eigentlich löschen will, immernoch ein seperates delete aufrufen muss?</p>
</blockquote>
<p>Ist ganz einfach: zu jedem new gehört ein delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929236</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 20 Jul 2010 15:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 15:50:16 GMT]]></title><description><![CDATA[<p>Okay, und dann hat webpages.clear() auch keine Auswirkungen auf die Objekte die unter den Pointern liegen, die in webpages gespeichert sind? D.h. diese Map müsste ich dann auch sequentiell durchgehen und jedes Element mit delete löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929249</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Tue, 20 Jul 2010 15:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 15:55:36 GMT]]></title><description><![CDATA[<p>Wie gesagt, zu jedem new gehört ein delete.</p>
<p>Du könntest es dir auch einfacher machen und auf delete-Orgien verzichten, indem du Objekte statt Zeiger in die Container stopfst; oder falls es nicht ohne geht, kannst du auch schlaue Zeiger nehmen, z. B. boost::shared_ptr; oder gleich einen boost Pointer Container. In allen drei Szenarien sparst du dir die deletes und baust weniger Speicherlecks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929251</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Tue, 20 Jul 2010 15:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 15:56:35 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Okay, und dann hat webpages.clear() auch keine Auswirkungen auf die Objekte die unter den Pointern liegen, die in webpages gespeichert sind? D.h. diese Map müsste ich dann auch sequentiell durchgehen und jedes Element mit delete löschen?</p>
</blockquote>
<p>Richtig. Du musst alles was du mit new angelegt hast auch wieder mit delete löschen. Und alles was du mit new[] anlegst mit delete[].</p>
<p>Tust du das nicht, dann erzeugst du ein Speicherleak! Da du aber ohnehin boost verwendest kannst du ja evtl. mit scoped_ptr arbeiten. Informiere dich mal darüber. Eventuell kannst du dir das Leben damit einfacher machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929252</guid><dc:creator><![CDATA[------]]></dc:creator><pubDate>Tue, 20 Jul 2010 15:56:35 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 15:58:39 GMT]]></title><description><![CDATA[<p>Ich meinte natürlich, wie mein Vorredner bereits vorgeschlagen hat einen shared_ptr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929254</guid><dc:creator><![CDATA[------]]></dc:creator><pubDate>Tue, 20 Jul 2010 15:58:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kann das hier einen Segfault verursachen? on Tue, 20 Jul 2010 19:06:43 GMT]]></title><description><![CDATA[<p>Wenn man keinen geteilten Besitz benötigt, ist <code>shared_ptr</code> eigentlich das falsche Mittel. Für Container würde ich eher <em>Boost.PointerContainer</em> einsetzen, wie schon von Nukularfüsiker erwähnt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1929322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1929322</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 20 Jul 2010 19:06:43 GMT</pubDate></item></channel></rss>