<?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[boost::shared_ptr verursacht Crash]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mir folgende simple Funktion geschrieben, um diese lustige Auto-Release-Funktionalität des shared_ptr zu testen:</p>
<pre><code class="language-cpp">void test(void)
{
    boost::shared_ptr&lt;int&gt; iptr,iptr2;
    int                    ival=0;

    iptr.reset(&amp;ival);
    ival=42;
    std::cout &lt;&lt; &quot;Value: &quot; &lt;&lt; *iptr &lt;&lt; std::endl;

    iptr2=iptr;
    std::cout &lt;&lt; &quot;Value &quot; &lt;&lt; *iptr2 &lt;&lt; std::endl;
}
</code></pre>
<p>Leider funktioniert das nicht, so bald ich die Funktion test() verlasse, schmiert mir das Programm ab - also genau da, wo Boost sich eigentlich um das freigeben der jetzt nicht mehr verwendeten Ressourcen der Shared Pointer kümmern sollte.</p>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301006/boost-shared_ptr-verursacht-crash</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 11:20:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301006.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Mar 2012 13:06:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:06:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe mir folgende simple Funktion geschrieben, um diese lustige Auto-Release-Funktionalität des shared_ptr zu testen:</p>
<pre><code class="language-cpp">void test(void)
{
    boost::shared_ptr&lt;int&gt; iptr,iptr2;
    int                    ival=0;

    iptr.reset(&amp;ival);
    ival=42;
    std::cout &lt;&lt; &quot;Value: &quot; &lt;&lt; *iptr &lt;&lt; std::endl;

    iptr2=iptr;
    std::cout &lt;&lt; &quot;Value &quot; &lt;&lt; *iptr2 &lt;&lt; std::endl;
}
</code></pre>
<p>Leider funktioniert das nicht, so bald ich die Funktion test() verlasse, schmiert mir das Programm ab - also genau da, wo Boost sich eigentlich um das freigeben der jetzt nicht mehr verwendeten Ressourcen der Shared Pointer kümmern sollte.</p>
<p>Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192123</guid><dc:creator><![CDATA[Miguel De La San Rosarios]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:13:09 GMT]]></title><description><![CDATA[<p>du legst einen shared pointer an, der auf ein int auf dem stack zeigt.<br />
Shared pointer ist zur verwaltung von heap-objekten da.</p>
<p>also dann einfcah</p>
<pre><code class="language-cpp">int * i = new int(5);
boost::shared_ptr&lt;int&gt; sp(i);
</code></pre>
<p>(am besten aber direkt mit make_shared anlegen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192125</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:13:09 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:13:54 GMT]]></title><description><![CDATA[<p>ival ist doch eine Variable auf dem Stack. Diese wird automatisch am Ende freigegeben:</p>
<pre><code class="language-cpp">void test() {
  int ival = 0;
  ival = 3;
} // &lt;--------- Hier wird ival freigegeben
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2192126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192126</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:21:55 GMT]]></title><description><![CDATA[<p>Stimmt, das ist die Ursache. Allerdings wirft das eine weitere Frage auf. Ich habe eine Struktur der Form</p>
<pre><code class="language-cpp">struct blubb
{
   int  irgendwas;
   int  laenge;
   char data[0];
}
</code></pre>
<p>Knackpunkt ist hier das data, dieses hat eine dynamische Länge, welche in &quot;laenge&quot; festgelegt wird. D.h. Variablen dieses Typs können nicht mit &quot;new struct blubb&quot; angelegt werden, sondern mit irgend sowas wie &quot;malloc(sizeof(struct blubb)+DataLaenge)&quot;. Wie lasse ich sowas von einem shared_ptr verwalten? Schließlich wäre es recht unschön, etwas malloc()iertes mit &quot;delete&quot; löschen zu lassen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192127</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192127</guid><dc:creator><![CDATA[Miguel De La San Rosarios]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:21:55 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:32:13 GMT]]></title><description><![CDATA[<p>Autsch, was für ein Hack.</p>
<pre><code class="language-cpp">struct blubb
{
   int  irgendwas;
   std::vector&lt;char&gt; data;
}
</code></pre>
<p>Machs so und lege blubb trotzdem nicht per new an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192131</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:32:13 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:40:01 GMT]]></title><description><![CDATA[<p>wieso nicht gleich std::string?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192134</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:41:52 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Machs so und lege blubb trotzdem nicht per new an.</p>
</blockquote>
<p>Und was hilft mir das, wenn ich es immer noch nicht mit new anlege???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192135</guid><dc:creator><![CDATA[Miguel De La San Rosarios]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:42:21 GMT]]></title><description><![CDATA[<p>diese malloc trickserei ist ziemlich gefährlich und unnötig (wie eben genannt einfach string oder vector nehmen).<br />
Wenn dus aber wirklich willst, kannst du einen shared_ptr per template argument einen custom deleter übergeben, der dann z.B. free statt delete aufruft.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192136</guid><dc:creator><![CDATA[*Q* 1]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:42:50 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>wieso nicht gleich std::string?</p>
</blockquote>
<p>Weil der Inhalt von data[] eben kein String ist sondern irgend ein anderes, x-beliebiges binäres Datenpaket sein kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192137</guid><dc:creator><![CDATA[Miguel De La San Rosarios]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:42:50 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:47:06 GMT]]></title><description><![CDATA[<p>Q schrieb:</p>
<blockquote>
<p>diese malloc trickserei ist ziemlich gefährlich und unnötig (wie eben genannt einfach string oder vector nehmen).<br />
Wenn dus aber wirklich willst, kannst du einen shared_ptr per <strong><s>template</s></strong> argument einen custom deleter übergeben, der dann z.B. free statt delete aufruft.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2192138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192138</guid><dc:creator><![CDATA[_-)]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:47:06 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 13:53:29 GMT]]></title><description><![CDATA[<p>und wenn du blubb einen Destruktor spendierst, der den Speicher freigibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192139</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Fri, 16 Mar 2012 13:53:29 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 14:08:42 GMT]]></title><description><![CDATA[<p>Miguel De La San Rosarios schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Machs so und lege blubb trotzdem nicht per new an.</p>
</blockquote>
<p>Und was hilft mir das, wenn ich es immer noch nicht mit new anlege???</p>
</blockquote>
<p>Und was hilft es dir, wenn du es mit new anlegst? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Bist du Java-Programmierer, oder so? <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="😕"
    /> In C++ legt man so viel wie möglich auf dem Stack ab. Alles was erst zur Laufzeit entschieden wird, wird mit new erstellt.</p>
<p>Sag uns doch mal, warum du es mit new anlegen willst, dann können wir dir auch helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192144</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 16 Mar 2012 14:08:42 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 14:08:43 GMT]]></title><description><![CDATA[<p>Miguel De La San Rosarios schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Machs so und lege blubb trotzdem nicht per new an.</p>
</blockquote>
<p>Und was hilft mir das, wenn ich es immer noch nicht mit new anlege???</p>
</blockquote>
<p>Du kannst es mit new anlegen ... nur, wozu ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192145</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Fri, 16 Mar 2012 14:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 14:12:53 GMT]]></title><description><![CDATA[<p>Miguel De La San Rosarios schrieb:</p>
<blockquote>
<p>daddy_felix schrieb:</p>
<blockquote>
<p>wieso nicht gleich std::string?</p>
</blockquote>
<p>Weil der Inhalt von data[] eben kein String ist sondern irgend ein anderes, x-beliebiges binäres Datenpaket sein kann.</p>
</blockquote>
<p>.. womit <code>string</code> übrigens sehr wohl zurechtkommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192146</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 16 Mar 2012 14:12:53 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 14:25:53 GMT]]></title><description><![CDATA[<p>Da würde ich in dem Fall aber trotzdem zu <code>vector&lt;char&gt;</code> raten, weil es domain-mäßig eindeutiger ist. In ein paar Jahren weiß dann keiner, was der String da soll. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2192147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192147</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 16 Mar 2012 14:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Fri, 16 Mar 2012 15:02:27 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Da würde ich in dem Fall aber trotzdem zu <code>vector&lt;char&gt;</code> raten, weil es domain-mäßig eindeutiger ist. In ein paar Jahren weiß dann keiner, was der String da soll. <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>
</blockquote>
<p>In wenigen Monaten ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192153</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 16 Mar 2012 15:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to boost::shared_ptr verursacht Crash on Sat, 17 Mar 2012 09:48:33 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Autsch, was für ein Hack.</p>
</blockquote>
<p>Dieser &quot;Hack&quot; wurde mit C99 im C-Bereich sogar standardisiert. Offiziell ist aber die Variante ohne 0 zwischen den eckigen Klammern, mit [0] ist es aber zumindest nicht verboten, auf Rücksicht auf C89-Compiler. Ob man sowas nun unbedingt auch in C++ benutzen muss, möchte ich allerdings bezweifeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2192320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2192320</guid><dc:creator><![CDATA[Horst Hansen]]></dc:creator><pubDate>Sat, 17 Mar 2012 09:48:33 GMT</pubDate></item></channel></rss>