<?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[Prüfen ob Variable mit new Speicher zugewiesen wurde]]></title><description><![CDATA[<p>Wie kann prüfen, ob einem Zeiger mit new Speicher zugewiesen wurde?</p>
<pre><code class="language-cpp">DatensatzAuslesen::DatensatzAuslesen(CString Filename)
{
	Sheet = new CSpreadSheet(Filename,&quot;;&quot;,FALSE);
	CString Error = Sheet-&gt;GetLastError();
	//MessageBox(0,Error,0,MB_OK);
}
</code></pre>
<p>Wenn dies aufgerufen wird, wird Sheet 'erstellt'<br />
Im Header steht</p>
<pre><code class="language-cpp">CSpreadSheet* Sheet;
</code></pre>
<p>Es muss nicht sein, dass DatensatzAuslesen aufgerufen wird. Ohne delete bekomme aber ein Speicherleck.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/185578/prüfen-ob-variable-mit-new-speicher-zugewiesen-wurde</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 17:10:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/185578.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Jun 2007 08:03:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:03:37 GMT]]></title><description><![CDATA[<p>Wie kann prüfen, ob einem Zeiger mit new Speicher zugewiesen wurde?</p>
<pre><code class="language-cpp">DatensatzAuslesen::DatensatzAuslesen(CString Filename)
{
	Sheet = new CSpreadSheet(Filename,&quot;;&quot;,FALSE);
	CString Error = Sheet-&gt;GetLastError();
	//MessageBox(0,Error,0,MB_OK);
}
</code></pre>
<p>Wenn dies aufgerufen wird, wird Sheet 'erstellt'<br />
Im Header steht</p>
<pre><code class="language-cpp">CSpreadSheet* Sheet;
</code></pre>
<p>Es muss nicht sein, dass DatensatzAuslesen aufgerufen wird. Ohne delete bekomme aber ein Speicherleck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314531</guid><dc:creator><![CDATA[etsmart]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:03:37 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:10:47 GMT]]></title><description><![CDATA[<p>Brauchst Du den Zeigen nach Verlassen von DatensatzAuslesen::DatensatzAuslesen noch? Wenn nicht dann setz doch das delete da rein. Ansonsten könnte man mit einer Prüfvariablen testen, ob die Funktion angesprungen wurde.<br />
Letzte Möglichkeit: Im Konstruktor Sheet=NULL setzen (sofern das nicht eh schon automatisch passiert). Dann brauchst Du vor delete nur schauen, ob der Zeiger NULL ist oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314533</guid><dc:creator><![CDATA[AndyDD]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:11:12 GMT]]></title><description><![CDATA[<p>Mach in den Konstruktor ein</p>
<pre><code class="language-cpp">Sheet = NULL;
</code></pre>
<p>Das ist eh ne Pflicht, wenn du mit Zeigern arbeitest!</p>
<p>So kannst du vor delete auf NULL prüfen.<br />
Und nach dem delete setzt du ihn auch wieder NULL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314534</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:12:30 GMT]]></title><description><![CDATA[<p>Woher der Speicher stammt, auf den ein Zeiger verweist, kannst du nicht feststellen. Aber was du machen kannst ist, den Zeiger mit NULL zu initialisieren, wenn du nicht über new gekommen bist (ein delete auf einen NULL-Zeiger ist erlaubt und bewirkt gar nichts).</p>
<p>(PS: Wie soll die Verarbeitung am Konstruktor vrobeikommen ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314535</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:12:30 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:21:01 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(PS: Wie soll die Verarbeitung am Konstruktor vrobeikommen ;))</p>
</blockquote>
<p>Indem ein anderer Konstruktor aufgerufen wird? <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/1314540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314540</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:30:01 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Woher der Speicher stammt, auf den ein Zeiger verweist, kannst du nicht feststellen.</p>
</blockquote>
<p>unter windoofs kannste damit feststellen, ob der pointer eine heap-adresse ist oder nicht: <a href="http://msdn2.microsoft.com/en-us/library/aa366708.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/aa366708.aspx</a><br />
<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/1314545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314545</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:44:49 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>unter windoofs kannste damit feststellen, ob der pointer eine heap-adresse ist oder nicht: <a href="http://msdn2.microsoft.com/en-us/library/aa366708.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/aa366708.aspx</a></p>
</blockquote>
<p>Naja... das mag ja gehen wenn Du den Speicher mittel &quot;HeapAlloc&quot; allokiert hast, aber nicht mit der CRT (da zumindest im Debug-Build noch Fill-Bytes vorne und hinten angefügrt werden; auch wird eine eigene Link-Struktur vorangestellt; somit ist der Zeiger nie der, welcher vom *richtigen* Heap allokiert wurde)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314556</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314556</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:44:49 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 08:45:02 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Woher der Speicher stammt, auf den ein Zeiger verweist, kannst du nicht feststellen.</p>
</blockquote>
<p>unter windoofs kannste damit feststellen, ob der pointer eine heap-adresse ist oder nicht: <a href="http://msdn2.microsoft.com/en-us/library/aa366708.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/aa366708.aspx</a><br />
<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>Was hat denn bitteschön HeapValidate() mit new zu tun? Das kann nur den Speicher überwachen, den du von HeapAlloc() angefordert hast.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/4897">@estartu</a>: OK, gutes Argument <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/1314558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314558</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 27 Jun 2007 08:45:02 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Wed, 27 Jun 2007 09:11:30 GMT]]></title><description><![CDATA[<p>AndyDD schrieb:</p>
<blockquote>
<p>Dann brauchst Du vor delete nur schauen, ob der Zeiger NULL ist oder nicht.</p>
</blockquote>
<p>Das ist unnötige ein delete auf einen NULL zeiger ist immer sicher!<br />
Das dämliche testen p!=0 kann man sich zu 100% sparen!</p>
<pre><code class="language-cpp">// Code der vüllig OK is:
char *p = NULL;
delete [] p;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1314579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314579</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 27 Jun 2007 09:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Fri, 29 Jun 2007 07:47:25 GMT]]></title><description><![CDATA[<p>Jochen Kalmbach schrieb:</p>
<blockquote>
<p>pale dog schrieb:</p>
<blockquote>
<p>unter windoofs kannste damit feststellen, ob der pointer eine heap-adresse ist oder nicht: <a href="http://msdn2.microsoft.com/en-us/library/aa366708.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/aa366708.aspx</a></p>
</blockquote>
<p>Naja... das mag ja gehen wenn Du den Speicher mittel &quot;HeapAlloc&quot; allokiert hast, aber nicht mit der CRT (da zumindest im Debug-Build noch Fill-Bytes vorne und hinten angefügrt werden; auch wird eine eigene Link-Struktur vorangestellt; somit ist der Zeiger nie der, welcher vom *richtigen* Heap allokiert wurde)!</p>
</blockquote>
<p>du hast recht, ich hab's ausprobiert.<br />
die adressen, die ein 'new' liefert, sind andere, als die, die HeapWalk ausspuckt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
sch... windows! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314680</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 29 Jun 2007 07:47:25 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Fri, 29 Jun 2007 07:52:07 GMT]]></title><description><![CDATA[<p>Was hat das mit Windows zu tun?</p>
<p>Das hat etwas mit der Entwicklungsumgebung zu tun. Andere C++ Compiler machen es nicht anders und implementieren auch eigene Heaps...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314682</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 29 Jun 2007 07:52:07 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Fri, 29 Jun 2007 08:09:19 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Andere C++ Compiler machen es nicht anders und implementieren auch eigene Heaps...</p>
</blockquote>
<p>warum kann ein compiler, der sowieso code für windows erzeugt, nicht die system-heaps benutzen?<br />
wär' doch viel cooler, es gäbe dann auch weniger probleme mit DLL's, die sonst immer ihre eigene CRT kopie einbinden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1314696</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1314696</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Fri, 29 Jun 2007 08:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Fri, 29 Jun 2007 21:04:22 GMT]]></title><description><![CDATA[<p>VC8 zumindest kann den Process Heap verwenden.<br />
Finde ich aber doof, da der dummerweise scheisse langsam ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Davon abgesehen: wenn Speicher mal dynamisch angefordert wird und mal anders mah ihc immer 2 Zeiger. Den über den der Speicher angesprochen wird, und einen eigenen zum löschen. Wenn man new verwendet setzt man beide und sonst eben nur den ersten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1315320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315320</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 29 Jun 2007 21:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Prüfen ob Variable mit new Speicher zugewiesen wurde on Sat, 30 Jun 2007 12:18:37 GMT]]></title><description><![CDATA[<p>pale dog schrieb:</p>
<blockquote>
<p>warum kann ein compiler, der sowieso code für windows erzeugt, nicht die system-heaps benutzen?<br />
wär' doch viel cooler, es gäbe dann auch weniger probleme mit DLL's, die sonst immer ihre eigene CRT kopie einbinden...</p>
</blockquote>
<p>Performance ist ein guter Grund. Und der Systemheap ist einfach lahm bei großer Anzahl kleiner Elemente!<br />
Aber selbst in dem Fall, dass der Systemheap verwendet wird, heißt dies nicht, das new nicht weitere Informationen in dem Speicherblock ablegt (z.B. die Größe des Arrays, der allokiert wurde) und der Zeiger der returniert wird definitv anders ist als die Adresse des HeapBlocks.</p>
<p>Einen Speichermanager verwenden nur die .NET Programme, und dasist auch nicht der System Heap <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/1315569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1315569</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 30 Jun 2007 12:18:37 GMT</pubDate></item></channel></rss>