<?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[einfach frage zu &amp;quot;new&amp;quot;]]></title><description><![CDATA[<pre><code class="language-cpp">char *buffer;
buffer = new char [100];
// *...some other code...*
buffer = new char [200];
</code></pre>
<p>Wie groß wäre das Array am ende des codes? 200 oder 300 Bytes?<br />
Oder anders gefragt wird Speicher zusätzlich reserviert oder die ersten 100 Bytes überschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221523/einfach-frage-zu-quot-new-quot</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 02:28:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221523.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Aug 2008 17:12:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 17:12:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *buffer;
buffer = new char [100];
// *...some other code...*
buffer = new char [200];
</code></pre>
<p>Wie groß wäre das Array am ende des codes? 200 oder 300 Bytes?<br />
Oder anders gefragt wird Speicher zusätzlich reserviert oder die ersten 100 Bytes überschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574040</guid><dc:creator><![CDATA[newbie_cpp]]></dc:creator><pubDate>Sat, 30 Aug 2008 17:12:22 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 17:17:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>du weist dem Pointer buffer ein neu erzeugtes Array der Länge 200 zu, also enthält das Array, auf das der Pointer zeigt, logischerweise 200 chars. Das alte Array mit 100 Elementen verwaist allerdings -&gt; Dein Programm leaked!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574041</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sat, 30 Aug 2008 17:17:38 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 17:36:02 GMT]]></title><description><![CDATA[<p>Ah verstehe, dann sollte es so richtig stein denke ich mal (ohne memoryleak):</p>
<pre><code class="language-cpp">char *buffer;
buffer = new char [100];
// *other code*
delete []buffer;

buffer = new char [200];
// *other code*
delete []buffer;
</code></pre>
<p>nebenbei: gibts eine Möglichkeit die Arraygröße von 100chars auf 200chars zu erhöhen ohne die ersten 100chars zu 'wipen' und dann den Speicher neu anzufordern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574048</guid><dc:creator><![CDATA[newbie_cpp]]></dc:creator><pubDate>Sat, 30 Aug 2008 17:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 17:56:01 GMT]]></title><description><![CDATA[<p>newbie_cpp schrieb:</p>
<blockquote>
<p>nebenbei: gibts eine Möglichkeit die Arraygröße von 100chars auf 200chars zu erhöhen ohne die ersten 100chars zu 'wipen' und dann den Speicher neu anzufordern?</p>
</blockquote>
<p>Nein. Du müsstest zuerst neuen Speicher in der gewünschten Größe anfordern, den alten nicht mehr benötigten Bereich umkopieren, und dann den alten Speicher freigeben, wenn Du den Inhalt noch zu Beginn des neuen, größeren Speichers behalten willst. Du brauchst dann natürlich einen zweiten Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574055</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Sat, 30 Aug 2008 17:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 18:16:19 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Hilfe <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/1574059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574059</guid><dc:creator><![CDATA[newbie_cpp]]></dc:creator><pubDate>Sat, 30 Aug 2008 18:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 18:28:04 GMT]]></title><description><![CDATA[<p>std::vector = dynamisches Array. Das macht das umkopieren für dich <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/1574061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574061</guid><dc:creator><![CDATA[STDFREAK]]></dc:creator><pubDate>Sat, 30 Aug 2008 18:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 19:34:49 GMT]]></title><description><![CDATA[<blockquote>
<p>nebenbei: gibts eine Möglichkeit die Arraygröße von 100chars auf 200chars zu erhöhen ohne die ersten 100chars zu 'wipen' und dann den Speicher neu anzufordern?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Mit realloc:</p>
<pre><code class="language-cpp">char *buffer;
buffer = new char [100];
// ... 
realloc(buffer, 200* sizeof(char) );
</code></pre>
<p>Das einzige Problem könnte sein,dass eine Vergrösserung nicht möglich ist(, wenn z.B. nicht mehr genug freier Speicher verfügbar ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574073</guid><dc:creator><![CDATA[Programmierer]]></dc:creator><pubDate>Sat, 30 Aug 2008 19:34:49 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 19:35:12 GMT]]></title><description><![CDATA[<p>Ahh! Nein. Vergiss das sofort. <a href="http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.5" rel="nofollow">http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.5</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574074</guid><dc:creator><![CDATA[Don06]]></dc:creator><pubDate>Sat, 30 Aug 2008 19:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 19:35:46 GMT]]></title><description><![CDATA[<p>Ich würde dringend davon abraten, Speicherblöcke, welche mit new angelegt wurden, mit realloc zu verändern. new und delete gehören zusammen, das ist C++, während malloc, realloc und free zusammen gehören und C ist.</p>
<p>Entweder, wie STDFREAK es gesagt hat, <code>std::vector</code> verwenden oder gerade für chars wäre <code>std::string</code> verfügbar.<br />
<a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">std::vector</a><br />
<a href="http://www.cplusplus.com/reference/string/" rel="nofollow">std::string</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574075</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 30 Aug 2008 19:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 20:25:01 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename T&gt;
typename boost::enable_if&lt; boost::is_pod&lt; T &gt;, T* &gt;::type renew(const T* old_array, std::size_t old_size, std::size_t new_size)
{
    T* new_array = new T[ new_size ];
    std::copy( old_array, old_array + std::min( old_size, new_size ), new_array );
    delete [] old_array;
    return new_array;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1574080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574080</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 30 Aug 2008 20:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 20:32:50 GMT]]></title><description><![CDATA[<p>warum muss T ein pod sein? copy macht doch keine flachen kopien.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574082</guid><dc:creator><![CDATA[speicherverlust]]></dc:creator><pubDate>Sat, 30 Aug 2008 20:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 22:14:33 GMT]]></title><description><![CDATA[<p>Falls T kein POD ist, werden beim new Defaultkonstruktoren aufgerufen und der Copyctor wirft evtl. eine Exception. Mit keinem dieser Probleme wollte ich mich hier herumschlagen, zumal es darauf keine idealen Antworten gibt. Es ist eben leider nicht (portabel) möglich, array-new im Programm aufzuteilen in Speicheranforderung und Initialisierung.<br />
Schön wäre so etwas</p>
<pre><code class="language-cpp">// dieser Trick, um ggf. überladene new-operatoren zu finden (klappt allerdings nicht in exotischen Fällen)
struct empty {};
template &lt;typename T&gt;
struct op_new_helper : boost::mpl::if_&lt; boost::is_class&lt; T &gt;, T, empty &gt;::type
{
    typedef void* new_func(std::size_t);
    typedef void delete_func(void*);
    static new_func* const array_new_op;
    static delete_func* const array_delete_op;
};

template &lt;typename T&gt;
typename op_new_helper&lt; T &gt;::new_func* const op_new_helper&lt; T &gt;::array_new_op = &amp;operator new[]; // lookup des Initialisierers im Scope der Klasse
template &lt;typename T&gt;
typename op_new_helper&lt; T &gt;::delete_func* const op_new_helper&lt; T &gt;::array_delete_op = &amp;operator delete[];

template &lt;typename T&gt;
T* renew_advanced(const T* old_array, std::size_t new_size)
{
    std::size_t old_size = magic_func( old_array );
    T* new_array = reinterpret_cast&lt; T* &gt;( static_cast&lt; char* &gt;( op_new_helper&lt; T &gt;::array_new_op( new_size * sizeof( T ) + magic_value ) + magic_value ) );
    std::size_t initialized = 0;
    try
    {
        for ( ; initialized != std::min( old_size, new_size ); ++initialized )
            ::new( static_cast&lt; void* &gt;( new_array + initialized ) ) T( old_array[ initialized ] );
        for ( ; initialized != new_size; ++initialized )
            ::new( static_cast&lt; void* &gt;( new_array + initialized ) ) T();
    }
    catch ( ... )
    {
        for ( ; initialized--; )
            new_array[ initialized ].~T();
        op_new_helper&lt; T &gt;::array_delete_op( new_array );
        throw;
    }
    do_array_magic( new_array ); // zwecks Kompatibilität mit new T[ ... ]
    delete [] old_array;
    return new_array;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1574084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574084</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 30 Aug 2008 22:14:33 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sat, 30 Aug 2008 20:59:56 GMT]]></title><description><![CDATA[<p>STDFREAK schrieb:</p>
<blockquote>
<p>std::vector = dynamisches Array. Das macht das umkopieren für dich <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>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574087</guid><dc:creator><![CDATA[ottoX]]></dc:creator><pubDate>Sat, 30 Aug 2008 20:59:56 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sun, 31 Aug 2008 15:18:07 GMT]]></title><description><![CDATA[<p>Oder ohne STL:</p>
<pre><code class="language-cpp">char *pcBuffer= new char[100];
//Do something
char *pcTempBuffer= new char[sizeof(pcBuffer)/sizeof(char) + 200];
CopyMemory(pcTempBuffer,pcBuffer,sizeof(pcBuffer));
delete[] pcBuffer;
pcBuffer= pcTempBuffer;
//Do something
delete[] pcBuffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1574289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574289</guid><dc:creator><![CDATA[Blaze]]></dc:creator><pubDate>Sun, 31 Aug 2008 15:18:07 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sun, 31 Aug 2008 15:31:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17796">@Blaze</a>,<br />
Ist das nicht ein wenig idiotisch, wenn man auf die STL, bzw. Standardbibliothek, verzichtet und dafür auf WinAPI Funktionen (CopyMemory) zurückgreift?</p>
<p>Zudem, wieso sollte man <code>std::vector</code> nicht verwenden wollen? Was spricht dagegen? Und auch wenn du ohne <code>std::vector</code> auskommen möchtest, dann verwende zumindest die Standard-Algorithmen für das Kopieren des Chararrays, also <code>std::copy</code> !</p>
<p>Zudem wird dein Code nicht funktionieren. <code>sizeof(pcBuffer)</code> wird dir auf einem 32-Bit System immer 4 und auf 64-Bit immer 8 zurückgeben. Und das ist so ein richtig typischer Grund, wieso solcher Code so fehleranfällig ist und man lieber die Standardbibliothek, also <code>std::vector</code> verwenden sollte!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574291</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 31 Aug 2008 15:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Sun, 31 Aug 2008 16:11:23 GMT]]></title><description><![CDATA[<p>von der exception unsicherheit mal abgesehen <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>Ne, es kann aber durchaus gruende gegen std::vector geben - aber dann lautet die antwort &quot;ein passenderer container&quot;. nackte arrays fasst man nicht an. nie. wenn man std::vector nicht verwenden will/kann/soll/... dann eben ein anderer container der ein array darstellt. zB boost::array oder aehnliches.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574305</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Sun, 31 Aug 2008 16:11:23 GMT</pubDate></item><item><title><![CDATA[Reply to einfach frage zu &amp;quot;new&amp;quot; on Mon, 01 Sep 2008 07:35:55 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich würde dringend davon abraten, Speicherblöcke, welche mit new angelegt wurden, mit realloc zu verändern.</p>
</blockquote>
<p>Nicht davon abraten. Strengstens verbieten! Das Mischen von new/delete und malloc/realloc/free führt zu undefiniertem Verhalten, Punkt. Wer sowas hier vorschlägt sollte sich dringendst nochmal mit einem guten C++-Buch auseinandersetzen bevor er hier weiter so hanebüchene Tips gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1574460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1574460</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 01 Sep 2008 07:35:55 GMT</pubDate></item></channel></rss>