<?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[new]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich frage mich wofür man new braucht.<br />
Ich weiß dass es sinnvoll ist Speicher dynamisch zu allokieren, aber vor welche Zeiger muss ich new schreiben. Ich meine ein Zeiger zeigt nur auf ein Element.<br />
Es handelt sich ja nicht um eine variable Größe die noch nicht bekannt ist.<br />
Irgendetwas scheine ich zu übersehen.</p>
<p>Kann mir das jemand bitte erklären?</p>
<p>Desweiteren wurde</p>
<p>Koordinate *p = new Koordinate;<br />
p-&gt;x = 35; p-&gt;y = 28;<br />
Koordinate *pC = p; //wurde blau markiert<br />
delete p;<br />
pC-&gt;x = 47;</p>
<p>als typischer Fehler angegeben.<br />
Ich hätte das so aber auch gemacht.<br />
Oder ist die eingeschobene Zeile, also die Kopie anlegen schon die Behebung des Fehlers, da wenn man wieder p benutzen würd, der Zeiger irgendwohin zeigt und es Probleme gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/322610/new</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Jul 2026 01:50:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322610.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Dec 2013 11:00:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new on Tue, 31 Dec 2013 11:03:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich frage mich wofür man new braucht.<br />
Ich weiß dass es sinnvoll ist Speicher dynamisch zu allokieren, aber vor welche Zeiger muss ich new schreiben. Ich meine ein Zeiger zeigt nur auf ein Element.<br />
Es handelt sich ja nicht um eine variable Größe die noch nicht bekannt ist.<br />
Irgendetwas scheine ich zu übersehen.</p>
<p>Kann mir das jemand bitte erklären?</p>
<p>Desweiteren wurde</p>
<p>Koordinate *p = new Koordinate;<br />
p-&gt;x = 35; p-&gt;y = 28;<br />
Koordinate *pC = p; //wurde blau markiert<br />
delete p;<br />
pC-&gt;x = 47;</p>
<p>als typischer Fehler angegeben.<br />
Ich hätte das so aber auch gemacht.<br />
Oder ist die eingeschobene Zeile, also die Kopie anlegen schon die Behebung des Fehlers, da wenn man wieder p benutzen würd, der Zeiger irgendwohin zeigt und es Probleme gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374254</guid><dc:creator><![CDATA[Ravend]]></dc:creator><pubDate>Tue, 31 Dec 2013 11:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to new on Tue, 31 Dec 2013 11:23:29 GMT]]></title><description><![CDATA[<p>Nackte new Befehle braucht man praktisch nie. C++ bietet viele Standardcontainer die implizit zwar new benutzen, welches man selbst aber bei der Benutzung der Container nie braucht.</p>
<p>Zu deinem Beispiel:</p>
<p>Der Zeiger p wird mit einem dynamisch allokierten Speicherbereich initialisiert, d.h. p zeigt auf eine gültige Adresse.<br />
Sobald delete für den Zeiger p aufgerufen wird, ist der allokierte Speicherbereich freigegeben was in der Praxis bedeutet, das ein Zugriff auf diesen Bereich einen Fehler darstellt (es ist undefiniert was passiert, wenn du auf einen derartigen Bereich zugreifst, es könnte alles passieren, praktisch würd dein Programm aber meistens abstürzen).</p>
<p>Dadurch das du vor dem Löschen von p den Speicherbereich auf den er zeigt an pC weitergegeben hast, kannst du auch nach dem Löschen von p auf den Bereich zugreifen, was wie oben gesagt zu nicht definiertem Verhalten führt. Das ist immer schlecht und führt meistens zu einem Absturz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374257</guid><dc:creator><![CDATA[Namenloser324]]></dc:creator><pubDate>Tue, 31 Dec 2013 11:23:29 GMT</pubDate></item><item><title><![CDATA[Reply to new on Tue, 31 Dec 2013 12:06:44 GMT]]></title><description><![CDATA[<p>Ravend schrieb:</p>
<blockquote>
<p>... es sinnvoll ist Speicher dynamisch zu allokieren ...</p>
</blockquote>
<p>Diese Aussage ist falsch! Wenn immer es geht, sollte Speicher in C++ <strong>nicht</strong> dynamisch allokiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374263</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 31 Dec 2013 12:06:44 GMT</pubDate></item><item><title><![CDATA[Reply to new on Tue, 31 Dec 2013 12:12:10 GMT]]></title><description><![CDATA[<p>Genauer gesagt ist dynamische Allokation zwar sinnvoll, aber nicht manuell. Meist geschieht sie implizit; mit C++14 gibt es so gut wie keine Situationen mehr, wo man <code>new</code> oder <code>delete</code> im Code braucht.</p>
<pre><code>// Einzelnes Objekt
T obj; // bevorzugen wenn möglich
auto ptr = std::make_unique&lt;T&gt;();

// Container
std::vector&lt;T&gt; container;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2374265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374265</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 31 Dec 2013 12:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to new on Tue, 31 Dec 2013 14:02:20 GMT]]></title><description><![CDATA[<p>Ravend schrieb:</p>
<blockquote>
<p>Ich frage mich wofür man new braucht.<br />
Ich weiß dass es sinnvoll ist Speicher dynamisch zu allokieren, [...]</p>
</blockquote>
<p>Alter, fällt dir nicht auf, dass sich das beißt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374294</guid><dc:creator><![CDATA[ScottZhang]]></dc:creator><pubDate>Tue, 31 Dec 2013 14:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to new on Wed, 01 Jan 2014 16:16:06 GMT]]></title><description><![CDATA[<p>Hallo Ravend und willkommen im Forum <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>
<p>Ravend schrieb:</p>
<blockquote>
<p>Ich frage mich wofür man new braucht.<br />
Ich weiß dass es sinnvoll ist Speicher dynamisch zu allokieren, aber vor welche Zeiger muss ich new schreiben. Ich meine ein Zeiger zeigt nur auf ein Element.<br />
Es handelt sich ja nicht um eine variable Größe die noch nicht bekannt ist.</p>
</blockquote>
<p>Ich kenne mit meinen bescheidenen C++ Kenntnissen lediglich die <em>alte</em> Motivation einen <code>Array</code> zu erstellen, dessen Anzahl an Elementen erst zur Laufzeit bekannt sind, wie z.B. hier</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	unsigned int const elements = 10;

	double* p = new double [elements];

	delete [] p;

	return 0;
}
</code></pre>
<p>In Zeile 5 kann die Zahl 10 z.B. als Ausgabe einer anderen Funktion erfolgen. Dies lässt sich aber mit <code>vector</code> umgehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
	unsigned int elements = 10;

	// vector mit 'elements' Elementen als 0.0 initialisieren
	std::vector&lt;double&gt; vec(elements, 0.0);

	return 0;
}
</code></pre>
<p>Zeile 9 enthält alles was du benötigst, d.h. du musst nicht am Ende des Programms hinter dem Vektor <em>aufräumen</em>.</p>
<p>Ansonsten müsstest du mal dein konkretes Problem posten wo du glaubst, dass du <code>new</code> benötigst. <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>
<p>Viele Grüße,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374438</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Wed, 01 Jan 2014 16:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to new on Wed, 01 Jan 2014 16:14:15 GMT]]></title><description><![CDATA[<p>Klaus82 schrieb:</p>
<blockquote>
<p>Hallo Ravend und willkommen im Forum <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>
<p>Ravend schrieb:</p>
<blockquote>
<p>Ich frage mich wofür man new braucht.<br />
Ich weiß dass es sinnvoll ist Speicher dynamisch zu allokieren, aber vor welche Zeiger muss ich new schreiben. Ich meine ein Zeiger zeigt nur auf ein Element.<br />
Es handelt sich ja nicht um eine variable Größe die noch nicht bekannt ist.</p>
</blockquote>
<p>Ich kenne mit meinen bescheidenen C++ Kenntnissen lediglich die <em>alte</em> Motivation einen <code>Array</code> zu erstellen, dessen Anzahl an Elementen erst zur Laufzeit bekannt sind, wie z.B. hier</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	unsigned int const elements = 10;

	double* p = new double [elements];

	delete p;
	
	return 0;
}
</code></pre>
<p>In Zeile 5 kann die Zahl 10 z.B. als Ausgabe einer anderen Funktion erfolgen. Dies lässt sich aber mit <code>vector</code> umgehen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;vector&gt;

int main()
{
	unsigned int elements = 10;

	// vector mit 'elements' Elementen als 0.0 initialisieren
	std::vector&lt;double&gt; vec(elements, 0.0);

	return 0;
}
</code></pre>
<p>Zeile 9 enthält alles was du benötigst, d.h. du musst nicht am Ende des Programms hinter dem Vektor <em>aufräumen</em>.</p>
<p>Ansonsten müsstest du mal dein konkretes Problem posten wo du glaubst, dass du <code>new</code> benötigst. <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>
<p>Viele Grüße,<br />
-- Klaus.</p>
</blockquote>
<p>Zu jedem new[] gehört auch ein delete[] - du hast also ein Speicherleak in deinem Code!</p>
<p>Ansonsten kann new auch dann Sinn machen, wenn man mit Polymorphie arbeitet, etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374439</guid><dc:creator><![CDATA[jkljkljkl]]></dc:creator><pubDate>Wed, 01 Jan 2014 16:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to new on Wed, 01 Jan 2014 16:21:38 GMT]]></title><description><![CDATA[<p>jkljkljkl schrieb:</p>
<blockquote>
<p>Zu jedem new[] gehört auch ein delete[] - du hast also ein Speicherleak in deinem Code!</p>
</blockquote>
<p>Danke, habe es editiert.</p>
<p>Interessant, ich habe es ohne die eckigen Klammern durch valgrind gejagt und angeblich ist der heap wieder frei, er gibt mir lediglich einen Error aus. Erst wenn ich die eckige Klammer einsetze, dann verschwindet der Error.</p>
<pre><code>==10981== HEAP SUMMARY:
==10981==     in use at exit: 0 bytes in 0 blocks
==10981==   total heap usage: 1 allocs, 1 frees, 80 bytes allocated
==10981== 
==10981== All heap blocks were freed -- no leaks are possible
==10981== 
==10981== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 27 from 6)
==10981== 
==10981== 1 errors in context 1 of 1:
==10981== Mismatched free() / delete / delete []
==10981==    at 0x402719C: operator delete(void*) (vg_replace_malloc.c:457)
==10981==    by 0x8048B38: main (in /home/&lt;user&gt;/Uni/Cpp/sandkasten/mb)
==10981==  Address 0x458f028 is 0 bytes inside a block of size 80 alloc'd
==10981==    at 0x40278F4: operator new[](unsigned int) (vg_replace_malloc.c:343)
==10981==    by 0x8048B28: main (in /home/&lt;user&gt;/Uni/Cpp/sandkasten/mb)
==10981== 
--10981-- 
--10981-- used_suppression:     27 U1004-ARM-_dl_relocate_object
==10981== 
==10981== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 27 from 6)
</code></pre>
<p>Gruß,<br />
-- Klaus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374440</guid><dc:creator><![CDATA[Klaus82]]></dc:creator><pubDate>Wed, 01 Jan 2014 16:21:38 GMT</pubDate></item><item><title><![CDATA[Reply to new on Wed, 01 Jan 2014 16:57:54 GMT]]></title><description><![CDATA[<p>jkljkljkl schrieb:</p>
<blockquote>
<p>Ansonsten kann new auch dann Sinn machen, wenn man mit Polymorphie arbeitet, etc.</p>
</blockquote>
<p>Versteh ich nicht. Kannst du das erläutern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2374450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2374450</guid><dc:creator><![CDATA[out]]></dc:creator><pubDate>Wed, 01 Jan 2014 16:57:54 GMT</pubDate></item></channel></rss>