<?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[delete bei void*]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal ne frage zum delete Operator. Folgendes:</p>
<pre><code class="language-cpp">int *ptr = new int;
delete ptr;

//ist ja das gleiche wie
int *ptr = (int *)malloc(sizeof(*ptr));
free(ptr);
</code></pre>
<p>Ich habe mal gehört dass free() einen void* freigeben kann, delete aber nicht. Stimmt das? Beispiel:</p>
<pre><code class="language-cpp">void func(void *ptr)
{
  delete ptr;
}

int *ptr = new int;
func(ptr);
</code></pre>
<p>Würde das jetzt den Speicher auch wieder freigeben?</p>
<p>Achja, wenn man mit new ein array anfordert, also z.B. new int[20] muss man ja delete[] nehmen um den Speicher freizugeben.<br />
Wie ist das wenn man new int[1] macht. Gibt delete[] dann zu viel Speicher frei?^^</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284531/delete-bei-void</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 23:17:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284531.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 Apr 2011 15:37:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:37:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mal ne frage zum delete Operator. Folgendes:</p>
<pre><code class="language-cpp">int *ptr = new int;
delete ptr;

//ist ja das gleiche wie
int *ptr = (int *)malloc(sizeof(*ptr));
free(ptr);
</code></pre>
<p>Ich habe mal gehört dass free() einen void* freigeben kann, delete aber nicht. Stimmt das? Beispiel:</p>
<pre><code class="language-cpp">void func(void *ptr)
{
  delete ptr;
}

int *ptr = new int;
func(ptr);
</code></pre>
<p>Würde das jetzt den Speicher auch wieder freigeben?</p>
<p>Achja, wenn man mit new ein array anfordert, also z.B. new int[20] muss man ja delete[] nehmen um den Speicher freizugeben.<br />
Wie ist das wenn man new int[1] macht. Gibt delete[] dann zu viel Speicher frei?^^</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044173</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:39:44 GMT]]></title><description><![CDATA[<p>Das Hintergrund ist dass new den Konstruktor und delete den Destruktor aufrufen, malloc/free machen das nicht.<br />
Außerdem kannst du davon ausgehen dass beide ganz andere Speicherlisten verwalten, dh. sie sind nicht kompatibel.</p>
<blockquote>
<p>Achja, wenn man mit new ein array anfordert, also z.B. new int[20] muss man ja delete[] nehmen um den Speicher freizugeben.<br />
Wie ist das wenn man new int[1] macht. Gibt delete[] dann zu viel Speicher frei?^^</p>
</blockquote>
<p>Nö.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044177</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:39:44 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:42:00 GMT]]></title><description><![CDATA[<p>new/delete und new[]/delete[] und malloc/free dürfen drei völlig unterschiedliche Speicherbereiche benutzen. Als Anwender darfste nie einen Zeiger freigeben, der von einer anderen Sorte angelegt wurde.</p>
<p>Hast Du den void*, den Du mit delete gerne freigeben würdest, denn überhaupt mit new geholt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044178</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:42:00 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:42:48 GMT]]></title><description><![CDATA[<p>und wie is das jetzt mit dem void *? heißt das, dass das system sozusagen speichert an welcher adresse wie viel speichert angefordert is, egal was für einen typ der zeiger hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044179</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:42:48 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:44:12 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>new/delete und new[]/delete[] und malloc/free dürfen drei völlig unterschiedliche Speicherbereiche benutzen. Als Anwender darfste nie einen Zeiger freigeben, der von einer anderen Sorte angelegt wurde.</p>
<p>Hast Du den void*, den Du mit delete gerne freigeben würdest, denn überhaupt mit new geholt?</p>
</blockquote>
<p>naja in dem beispiel ja schon</p>
<pre><code class="language-cpp">void func(void *ptr)
{
  delete ptr;
}

int *ptr = new int;
func(ptr);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2044180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044180</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:44:12 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:48:55 GMT]]></title><description><![CDATA[<p>Das ist undefiniertes Verhalten.</p>
<p>Einziger Fall, wo angeforderter Zeigertyp (von <code>new</code> zurückgegeben) und freizugebender Zeigertyp (an <code>delete</code> übergeben) verschieden sein dürfen, sind Derived-To-Base-Konvertierungen mit virtuellem Destruktor in der Basisklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044183</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 15:50:24 GMT]]></title><description><![CDATA[<p>Naja, Du hast Dir eigentlich einen int* geholt.<br />
Hast nicht</p>
<pre><code class="language-cpp">void *ptr = new void;
</code></pre>
<p>geschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044185</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 03 Apr 2011 15:50:24 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:00:14 GMT]]></title><description><![CDATA[<p>new void? Gehe mal davon aus dass du jetzt vom prinzip sprichst weil new void klappt ja nicht.^^<br />
Naja jedenfalls hat ja free() als parameter auch nen void*. D.h. da müsste der typ egal sein oder wie is das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044195</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:00:14 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:04:57 GMT]]></title><description><![CDATA[<p>Du musst zwischen C++ und C unterscheiden.</p>
<p>In C hatte man keine andere Möglichkeit, weshalb dort die Verwendung von void * keine Probleme bereitet.</p>
<p>In C++ haut das nicht mehr hin, da Klassen weitaus komplexer sind. Der Typ muss daher immer feststehen, damit du delete bzw. delete[] aufrufen kannst.</p>
<p>Im übrigen ist es gar nicht gut, wenn man new und malloc, etc. im Programm mischt. Entscheide dich für C oder C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044199</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044199</guid><dc:creator><![CDATA[hkjkjhk]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:04:57 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:06:31 GMT]]></title><description><![CDATA[<p>d.h. delete bei einem void * gibt keinen speicher oder eben die falsche anzahl frei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044201</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:06:31 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:08:34 GMT]]></title><description><![CDATA[<p>Was delete dann macht ist undefiniert. Vielleicht gibt es den Speicher frei, vielleicht geht auch die Welt unter. Man kann sich nicht darauf verlassen und sollte es daher unterlassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044202</guid><dc:creator><![CDATA[löälöä]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:09:11 GMT]]></title><description><![CDATA[<p>1700 schrieb:</p>
<blockquote>
<p>new void? Gehe mal davon aus dass du jetzt vom prinzip sprichst weil new void klappt ja nicht.^^</p>
</blockquote>
<p>Sehe ich auch so. Und deswegen muß delete auch keinen void* nehmen.</p>
<p>1700 schrieb:</p>
<blockquote>
<p>Naja jedenfalls hat ja free() als parameter auch nen void*. D.h. da müsste der typ egal sein oder wie is das?</p>
</blockquote>
<p>Insofern ja, als daß Du vom malloc auch einen void* bekommen hast und ungetypten Speicher angelegt hast. Ohne Konstruktoraufruf. Und free machts dann auch ohne Destruktoraufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044203</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:12:03 GMT]]></title><description><![CDATA[<p>gut alles klar... denke es ist alles gesagt...</p>
<p>danke jungs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044206</guid><dc:creator><![CDATA[1700]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to delete bei void* on Sun, 03 Apr 2011 16:14:10 GMT]]></title><description><![CDATA[<p>Unbekanntes Objekt freigeben geht mit Templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2044209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2044209</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 03 Apr 2011 16:14:10 GMT</pubDate></item></channel></rss>