<?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[[gelöst durch nachdenken] pointer, boost und vectors]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Klasse &quot;Base&quot;, und zwei abgeleitete Klassen. Nun möchte ich mehrere Objekte davon in einer Liste speichern:</p>
<p><strong>base:</strong></p>
<pre><code class="language-cpp">class base : boost::noncopyable // So korrekt?
{
 public:
  virtual ~base() {}
  virtual void mach_was(p1, p2)=0; //p1 und p2 sindeigentliche andere Typen...
};
</code></pre>
<p><strong>verwaltende Klasse:</strong></p>
<pre><code class="language-cpp">class base_manager
{
 protected:  
  boost::ptr_vector&lt;base&gt; name1; // DIE STELLE...
  boost::ptr_vector&lt;base&gt; name2;

 public:
  base_manager() { /*...*/ }
  ~base_manager();

  void add_1(base* elem) { name1.push_back(elem); }
  void add_2(base* elem) { name2.push_back(elem); }
};
</code></pre>
<ol>
<li>
<p>Leider schmeißt das ganze einen Segfault, nachdem der Destruktor (reine Ausgabefunktion) der manager-Klasse fertig ist. Scheinbar gibt es Probleme, die beiden ptr_vector's zu löschen.</p>
</li>
<li>
<p>Kommentiere ich eine (egal welche) Zeile aus, sodass nur ein ptr_vector in der Klasse ist, funktioniert das ganze ohne Segfault.</p>
</li>
<li>
<p>Greife ich auf den zweiten (also den jeweils unteren, vertauschen bringt nichts...) ptr_vector zu, schmeißt er eine &quot;bad_alloc&quot;-Exception und bricht ab.</p>
</li>
</ol>
<p>Ich habe scheinbar was wichtiges bei den Boost-Containern übersehen, habe gerade erst mit boost angefangen...</p>
<p>Die Doku: <a href="http://www.boost.org/doc/libs/1_38_0/libs/ptr_container/doc/tutorial.html" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/libs/ptr_container/doc/tutorial.html</a><br />
hat mir auch nicht wirklich geholfen. Das sieht doch genauso aus? <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=":confused:"
      alt="😕"
    /></p>
<p>Bin mir sicher, das ihr mir helfen könnt, danke im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236356/gelöst-durch-nachdenken-pointer-boost-und-vectors</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 01:24:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236356.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Mar 2009 19:33:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 20:22:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe eine Klasse &quot;Base&quot;, und zwei abgeleitete Klassen. Nun möchte ich mehrere Objekte davon in einer Liste speichern:</p>
<p><strong>base:</strong></p>
<pre><code class="language-cpp">class base : boost::noncopyable // So korrekt?
{
 public:
  virtual ~base() {}
  virtual void mach_was(p1, p2)=0; //p1 und p2 sindeigentliche andere Typen...
};
</code></pre>
<p><strong>verwaltende Klasse:</strong></p>
<pre><code class="language-cpp">class base_manager
{
 protected:  
  boost::ptr_vector&lt;base&gt; name1; // DIE STELLE...
  boost::ptr_vector&lt;base&gt; name2;

 public:
  base_manager() { /*...*/ }
  ~base_manager();

  void add_1(base* elem) { name1.push_back(elem); }
  void add_2(base* elem) { name2.push_back(elem); }
};
</code></pre>
<ol>
<li>
<p>Leider schmeißt das ganze einen Segfault, nachdem der Destruktor (reine Ausgabefunktion) der manager-Klasse fertig ist. Scheinbar gibt es Probleme, die beiden ptr_vector's zu löschen.</p>
</li>
<li>
<p>Kommentiere ich eine (egal welche) Zeile aus, sodass nur ein ptr_vector in der Klasse ist, funktioniert das ganze ohne Segfault.</p>
</li>
<li>
<p>Greife ich auf den zweiten (also den jeweils unteren, vertauschen bringt nichts...) ptr_vector zu, schmeißt er eine &quot;bad_alloc&quot;-Exception und bricht ab.</p>
</li>
</ol>
<p>Ich habe scheinbar was wichtiges bei den Boost-Containern übersehen, habe gerade erst mit boost angefangen...</p>
<p>Die Doku: <a href="http://www.boost.org/doc/libs/1_38_0/libs/ptr_container/doc/tutorial.html" rel="nofollow">http://www.boost.org/doc/libs/1_38_0/libs/ptr_container/doc/tutorial.html</a><br />
hat mir auch nicht wirklich geholfen. Das sieht doch genauso aus? <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=":confused:"
      alt="😕"
    /></p>
<p>Bin mir sicher, das ihr mir helfen könnt, danke im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679599</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679599</guid><dc:creator><![CDATA[*-star*home-*]]></dc:creator><pubDate>Sat, 14 Mar 2009 20:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 14:55:43 GMT]]></title><description><![CDATA[<p>Wie sieht denn das aus, wenn du add_1 und add_2 aufrufst?<br />
Ich habe die starke Vermutung, dass du da etwas übergibst, was bereits aufgeräumt wird, wie z.B automatische Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1679897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1679897</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 14 Mar 2009 14:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 19:11:04 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">base_manager.add_1(new derive1());
base_manager.add_2(new derive2());
</code></pre>
<p>Aber der Segfault kommt auch, wenn die ptr_vectors leer sind... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680020</guid><dc:creator><![CDATA[*-star*home-*]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:11:04 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 19:42:05 GMT]]></title><description><![CDATA[<p>Kannst du mal Konstruktor und Destruktor von <code>base_manager</code> zeigen und die Stelle markieren, an der der Segmentation Fault auftritt? Was steht denn in der Fehlermeldung?</p>
<p>Ansonsten hast du keine Abhängigkeiten mehr, hast du ein Minimalbeispiel versucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680036</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:42:05 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 19:52:48 GMT]]></title><description><![CDATA[<p>Schon den Debugger angeworfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680042</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Sat, 14 Mar 2009 19:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst durch nachdenken] pointer, boost und vectors on Sat, 14 Mar 2009 20:22:20 GMT]]></title><description><![CDATA[<p>Vergesst es, ich bin doof...<br />
Natürlcih habe ich ein lokales Objekt (nix mit Heap..) in einer derive-Klasse löschen wollen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Danke trotzdem...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1680063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1680063</guid><dc:creator><![CDATA[*-star*home-*]]></dc:creator><pubDate>Sat, 14 Mar 2009 20:22:20 GMT</pubDate></item></channel></rss>