<?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[malloc und Exceptions]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein Code sieht zur Zeit immer etwa so aus:</p>
<pre><code class="language-cpp">char* p = (char*)malloc(4096);
try{
// Hier kann ne Exception fliegen
free(p);
}
catch(...){
free(p);
throw;
}
</code></pre>
<p>Gibt es da noch ne andere Möglichkeit?</p>
<p>Es geht ja auch mit einem std::vector (nicht getestet!):</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; vec = std::vector&lt;char&gt;(4096);
// Hier fliegt ne Exception
</code></pre>
<p>Das ist natürlich kürzer, aber wie groß ist der Overhead?<br />
(Ich bin da ziemlich pingelig <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>Kann man anders dafür sorgen, dass mein durch malloc angeforderter<br />
Speicher nach Ablauf des Blocks immer freigegeben wird?</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/162124/malloc-und-exceptions</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 02:27:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/162124.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Oct 2006 02:30:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 02:33:15 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein Code sieht zur Zeit immer etwa so aus:</p>
<pre><code class="language-cpp">char* p = (char*)malloc(4096);
try{
// Hier kann ne Exception fliegen
free(p);
}
catch(...){
free(p);
throw;
}
</code></pre>
<p>Gibt es da noch ne andere Möglichkeit?</p>
<p>Es geht ja auch mit einem std::vector (nicht getestet!):</p>
<pre><code class="language-cpp">std::vector&lt;char&gt; vec = std::vector&lt;char&gt;(4096);
// Hier fliegt ne Exception
</code></pre>
<p>Das ist natürlich kürzer, aber wie groß ist der Overhead?<br />
(Ich bin da ziemlich pingelig <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>Kann man anders dafür sorgen, dass mein durch malloc angeforderter<br />
Speicher nach Ablauf des Blocks immer freigegeben wird?</p>
<p>Gruß,<br />
*Cpp-Anfänger*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1154919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154919</guid><dc:creator><![CDATA[*Cpp-Anfänger* 0]]></dc:creator><pubDate>Sun, 15 Oct 2006 02:33:15 GMT</pubDate></item><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 06:53:02 GMT]]></title><description><![CDATA[<p>a) Wenn überhaupt dann new[] und delete[] nehmen!<br />
b) Der Overhead von Vector ist zu vernachlässigen. Wenn du aber immer eine feste größe hast kannst du auch boost::array&lt;&gt; nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1154938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1154938</guid><dc:creator><![CDATA[...........]]></dc:creator><pubDate>Sun, 15 Oct 2006 06:53:02 GMT</pubDate></item><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 11:02:47 GMT]]></title><description><![CDATA[<p>Der Overhead bei std::vector ist das ganze Array mit 0 initialisiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155037</guid><dc:creator><![CDATA[wew]]></dc:creator><pubDate>Sun, 15 Oct 2006 11:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 11:24:59 GMT]]></title><description><![CDATA[<p>Zur not baust du dir halt einen smart-ptr:</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
class smart_ptr
{
public:
  smart_ptr( T* src = 0 ) //mit malloc allozierter speicher
    : pointee_( src )
  {
  }

  ~smart_ptr()
  {
      free( pointee_ );
  }

  T&amp; operator*()
  {
      return *pointee_;
  }

  T* operator-&gt;()
  {
      return pointee_;
  }

  T* get()
  {
      return pointee_;
  }

  bool is_valid()
  {
      return pointee_ != 0;
  }

private:

  const smart_ptr&amp; operator=( const smart_ptr&amp; other );
  smart_ptr( const smart_ptr&amp; other );

  T* pointee_;
};
</code></pre>
<p>Ist nicht wirklich ausgereift, aber das grundlegende hat er so.</p>
<p>Achja du kannst auch einfach rohen speicher mit ::operator new[] anfordern, dann wird der Konstruktor nicht aufgerufen und den kannst du über ein placement new aufrufen, dann kannst du den speicher einfach mit delete[] löschen, wenn operator delete[] nicht überladen wurde, ansonsten einfach mit einem expliziten d'tor Aufruf und einem anschließenden ::operator delete[] Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155041</guid><dc:creator><![CDATA[lolz]]></dc:creator><pubDate>Sun, 15 Oct 2006 11:24:59 GMT</pubDate></item><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 14:04:33 GMT]]></title><description><![CDATA[<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>Gibt es da noch ne andere Möglichkeit?</p>
</blockquote>
<p>Ja, du nimmst einen entsprechenden Smart Pointer, wie boost::scoped_array. Die bessere Lösung ist hier aber definitiv ein passender Container. Und wie bereits erwähnt wurde, der Overhead ist zu vernachlässigen. Sollten idR maximal 2 size_t's zusätzlich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155125</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Sun, 15 Oct 2006 14:04:33 GMT</pubDate></item><item><title><![CDATA[Reply to malloc und Exceptions on Sun, 15 Oct 2006 22:11:06 GMT]]></title><description><![CDATA[<p><em>Cpp-Anfänger</em> schrieb:</p>
<blockquote>
<p>...Overhead ... (Ich bin da ziemlich pingelig)...Cpp-Anfänger</p>
</blockquote>
<p>Warum bist Du da pingelig ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1155334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1155334</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 15 Oct 2006 22:11:06 GMT</pubDate></item></channel></rss>