<?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[Pointer-Pointer]]></title><description><![CDATA[<p>Halli Hallo!</p>
<p>Ich habe eine Klasse CRoundBuffer, welche folgenden Pointer-Pointer Member hat</p>
<pre><code class="language-cpp">CTrace **m_pBuffer;
</code></pre>
<p>Dieser wird folgendermassen initialisiert:</p>
<pre><code class="language-cpp">/** */
CRoundBuffer::CRoundBuffer() :
  m_nEnd(c_Size - 1),
  m_nIn(0),
  m_nOut(0),
  m_pBuffer(new CTrace*[c_Size])
{

}
</code></pre>
<p>und so wieder gelöscht:</p>
<pre><code class="language-cpp">/** */
CRoundBuffer::~CRoundBuffer()
{
  for (int nCounter = 0; nCounter &lt; c_Size; nCounter++)
  {
    delete m_pBuffer[nCounter];
    m_pBuffer[nCounter] = NULL;
  }
  delete[] m_pBuffer;
  m_pBuffer = NULL;
}
</code></pre>
<p>Während der Laufzeit wird die Member-Variable m_pBuffer mit CTrace-Objekt-Pointer gefüllt. Ich dachte dass ich nach Zerstöerung eines CRoundBuffer-Objekts nicht mehr auf die Adressen dieser CTrace-Objekte zugreifen kann.<br />
Aber ehrlich gesagt konnte ich es! Ohne Exceptions! Aber Allerdings sind die Werte der Member-Variablen verloren gegangen. Mache ich etwas falsch? Produziere ich Memory-Leaks?</p>
<p>Gruss SiMu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/166459/pointer-pointer</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 10:03:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/166459.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 29 Nov 2006 14:27:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 14:28:36 GMT]]></title><description><![CDATA[<p>Halli Hallo!</p>
<p>Ich habe eine Klasse CRoundBuffer, welche folgenden Pointer-Pointer Member hat</p>
<pre><code class="language-cpp">CTrace **m_pBuffer;
</code></pre>
<p>Dieser wird folgendermassen initialisiert:</p>
<pre><code class="language-cpp">/** */
CRoundBuffer::CRoundBuffer() :
  m_nEnd(c_Size - 1),
  m_nIn(0),
  m_nOut(0),
  m_pBuffer(new CTrace*[c_Size])
{

}
</code></pre>
<p>und so wieder gelöscht:</p>
<pre><code class="language-cpp">/** */
CRoundBuffer::~CRoundBuffer()
{
  for (int nCounter = 0; nCounter &lt; c_Size; nCounter++)
  {
    delete m_pBuffer[nCounter];
    m_pBuffer[nCounter] = NULL;
  }
  delete[] m_pBuffer;
  m_pBuffer = NULL;
}
</code></pre>
<p>Während der Laufzeit wird die Member-Variable m_pBuffer mit CTrace-Objekt-Pointer gefüllt. Ich dachte dass ich nach Zerstöerung eines CRoundBuffer-Objekts nicht mehr auf die Adressen dieser CTrace-Objekte zugreifen kann.<br />
Aber ehrlich gesagt konnte ich es! Ohne Exceptions! Aber Allerdings sind die Werte der Member-Variablen verloren gegangen. Mache ich etwas falsch? Produziere ich Memory-Leaks?</p>
<p>Gruss SiMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183813</guid><dc:creator><![CDATA[simu87]]></dc:creator><pubDate>Wed, 29 Nov 2006 14:28:36 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 15:28:14 GMT]]></title><description><![CDATA[<p>Hm ich glaube, wenn man einen Pointer auf ein Objekt deleted dann kann man trotzdem noch darauf zugreifen, solange man den Pointer nicht auf NULL setzt.<br />
Sonst würde dieses kleine Beispiel unten nicht funktionieren.</p>
<p>Falls aber etwas auf diesem freigegebenem Speicher etwas neues drauf speichern würde(Er ist ja nach delete nicht mehr reserviert), dann wäre der Zugriff mit dem alten Pointer wahrscheinlich nicht mehr möglich.</p>
<pre><code class="language-cpp">CTrace* Test = new CTrace(111);
delete Test;
Test-&gt;SayHello();
</code></pre>
<p>Könnte das so sein? oder erzähle ich schwachsinn? <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/1183870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183870</guid><dc:creator><![CDATA[simu87]]></dc:creator><pubDate>Wed, 29 Nov 2006 15:28:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 15:33:24 GMT]]></title><description><![CDATA[<p>sowas nennt sich dann wohl undefiniertes verhalten <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/1183877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183877</guid><dc:creator><![CDATA[Cpt.Tanga]]></dc:creator><pubDate>Wed, 29 Nov 2006 15:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 15:34:39 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich glaube, Du unterliegst da einem Mißverständnis: Eine Pointervariable speichert eine Zahl, die eine Speicheradresse repräsentiert - auf den Speicher an dieser Adresse kannst Du unabhängig davon zugreifen, ob ein Zeiger dahinzeigt, oder nicht. Allerdings garantiert Dir das System nur &quot;in der Zeit zwischen new und delete&quot;, dass Du dort etwas &quot;sinnvolles&quot; findest - und dass Du da überhaupt drauf zugreifen darfst.<br />
Was passiert, wenn Du nach dem delete &quot;dahinpackst&quot;, ist undefiniert - was genau das bedeutet: Alles ist möglich ! (auch, dass da noch das liegt, was Du da mal hingelegt hast ... aber auch, dass das Betriebssystem Deinen Prozess abschießt)</p>
<p>Eine Zeigervariable auf 0 zu setzen, ist eigentlich eher als Hilfe für den Programmierer zu verstehen - so kann er sich merken, dass er auf die Variable schonmal ein delete drauf gemacht hat (und ein weiteres delete keinen Schaden anrichtet).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183878</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 15:34:39 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 15:42:18 GMT]]></title><description><![CDATA[<p>OK, mir ist es jetzt klar.</p>
<p>Ich dachte eben zu Beginn dass &quot;delete&quot; den Speicher nicht nur freigibt sondern auch noch in jedem Fall alles löscht was drauf war und in gar keinem Fall mehr zu gebrauchen ist wie man es zwischen new und delete gemacht hat.</p>
<p>Aber wie du sagst ist nichts gewähr leistet auf einer Speicheradresse die wieder freigegeben wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183889</guid><dc:creator><![CDATA[simu87]]></dc:creator><pubDate>Wed, 29 Nov 2006 15:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer-Pointer on Wed, 29 Nov 2006 16:24:06 GMT]]></title><description><![CDATA[<p>Schön, dass wir helfen konnten.<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="🙂"
    /><br />
keep coding,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1183922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1183922</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 29 Nov 2006 16:24:06 GMT</pubDate></item></channel></rss>