<?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[Zeigerfrage]]></title><description><![CDATA[<p>Folgendes Beispiel:</p>
<pre><code class="language-cpp">BITMAP* tempanim =  new BITMAP[SIZE];
for(int i = 0; i &lt; SIZE;i++)// i = 0 to i = 28 
{                      {
tempanim[i] = *load_bitmap(temp.c_str(),NULL);
}
</code></pre>
<p>load_bitmap &quot;Returns a pointer to the bitmap or NULL on error. Remember that you are responsible for destroying the bitmap when you are finished with it to avoid memory leaks. &quot;</p>
<p>load_bitmap lädt, wer hätte es gedacht ein bitmap. Nun würde ich gerne die Adresse dieser Bitmaps im Speicher in den Zeiger tempanim laden, ABER mir ist gerade was eingefallen:**</p>
<p>Muss ich statt einen Zeiger auf einen Array, hier einen Array von Zeigern benutzen? Ich muss ja, da eine Adresse auf einen dynamischen Speicher zurückgegeben wird, diese Adresse beibehalten und nicht nur den Inhalt der Speicherzelle auf die die Adresse verweist.<br />
So wie es jetzt ist, speichere ich den Wert der Speicherzelle und verliere damit doch eine Adresse, oder? Ist diese Überlegung richtig?**</p>
<p>Vielen Dank für eure 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/topic/262771/zeigerfrage</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 08:37:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262771.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Mar 2010 08:43:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 08:43:46 GMT]]></title><description><![CDATA[<p>Folgendes Beispiel:</p>
<pre><code class="language-cpp">BITMAP* tempanim =  new BITMAP[SIZE];
for(int i = 0; i &lt; SIZE;i++)// i = 0 to i = 28 
{                      {
tempanim[i] = *load_bitmap(temp.c_str(),NULL);
}
</code></pre>
<p>load_bitmap &quot;Returns a pointer to the bitmap or NULL on error. Remember that you are responsible for destroying the bitmap when you are finished with it to avoid memory leaks. &quot;</p>
<p>load_bitmap lädt, wer hätte es gedacht ein bitmap. Nun würde ich gerne die Adresse dieser Bitmaps im Speicher in den Zeiger tempanim laden, ABER mir ist gerade was eingefallen:**</p>
<p>Muss ich statt einen Zeiger auf einen Array, hier einen Array von Zeigern benutzen? Ich muss ja, da eine Adresse auf einen dynamischen Speicher zurückgegeben wird, diese Adresse beibehalten und nicht nur den Inhalt der Speicherzelle auf die die Adresse verweist.<br />
So wie es jetzt ist, speichere ich den Wert der Speicherzelle und verliere damit doch eine Adresse, oder? Ist diese Überlegung richtig?**</p>
<p>Vielen Dank für eure 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/1867330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867330</guid><dc:creator><![CDATA[kingcools]]></dc:creator><pubDate>Thu, 11 Mar 2010 08:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 09:26:23 GMT]]></title><description><![CDATA[<pre><code>*load_bitmap(temp.c_str(),NULL)
</code></pre>
<p>Wenn das NULL zurück gibt bist du am Arsch. <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/1867348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867348</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:26:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 09:36:02 GMT]]></title><description><![CDATA[<p>...und auch sonst hätte er ein Problem: Speicherlecks. loadbitmap erzeugt das Objekt im Heap (wahrscheinlich). Er kann es aber nicht mehr löschen, weil der Zeiger verloren geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867351</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 09:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 10:52:01 GMT]]></title><description><![CDATA[<p>sehr schön wie ihr auf meine Frage eingeht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867389</guid><dc:creator><![CDATA[kingcools2]]></dc:creator><pubDate>Thu, 11 Mar 2010 10:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 12:04:56 GMT]]></title><description><![CDATA[<p>kingcools2 schrieb:</p>
<blockquote>
<p>sehr schön wie ihr auf meine Frage eingeht</p>
</blockquote>
<p>Ich hatte es vorhin eilig und wollte nur kurz meinen Senf dazugeben. Ist denn jetzt noch was unklar?</p>
<blockquote>
<p>&gt; Muss ich statt einen Zeiger auf einen Array, hier einen Array von Zeigern benutzen?</p>
</blockquote>
<p>Du musst gar nichts. Kommt drauf an, was Du willst. Du kannst die Zeiger auch in einem Vektor speichern, oder in einem shared_ptr kapseln. Es gibt sooooo viele Möglichkeiten.</p>
<pre><code class="language-cpp">BITMAP** frickelig = new BITMAP*[SIZE];
for (int k=0; k&lt;SIZE; ++k) {
   frickelig[k] = loadbitmap(...);
}
for (int k=0; k&lt;SIZE; ++k) {
   delete drickelig[k];
}
delete[] frickelig;
</code></pre>
<pre><code class="language-cpp">vector&lt;BITMAP*&gt; besser (SIZE);
for (int k=0; k&lt;SIZE; ++k) {
   besser[k] = loadbitmap(...);
}
for (int k=0; k&lt;SIZE; ++k) {
   delete besser[k];
}
</code></pre>
<pre><code class="language-cpp">vector&lt;shared_ptr&lt;BITMAP&gt; &gt; auchok (SIZE);
for (int k=0; k&lt;SIZE; ++k) {
   shared_ptr&lt;BITMAP&gt; sp ( loadbitmap(...) );
   auchok[k] = sp;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867442</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 11 Mar 2010 12:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 12:21:33 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector&lt;shared_ptr&lt;BITMAP&gt; &gt; auchok (SIZE);
for (int k=0; k&lt;SIZE; ++k) {
   shared_ptr&lt;BITMAP&gt; sp ( loadbitmap(...) );
   auchok[k] = sp;
}
</code></pre>
<p>...</p>
</blockquote>
<p>Wenn der Compiler schon unique_ptr aus C++0x kennt, dann lieber vector&lt;unique_ptr&lt;BITMAP&gt;&gt; oder alternativ boost::ptr_vector.</p>
<p>shared_ptr im vector hat viel unnötigen overhead.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1867451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867451</guid><dc:creator><![CDATA[CptC]]></dc:creator><pubDate>Thu, 11 Mar 2010 12:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Thu, 11 Mar 2010 16:26:34 GMT]]></title><description><![CDATA[<p>danke sehr <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/1867594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1867594</guid><dc:creator><![CDATA[kingcools2]]></dc:creator><pubDate>Thu, 11 Mar 2010 16:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Fri, 12 Mar 2010 19:11:34 GMT]]></title><description><![CDATA[<p>ok, hab mich doch noch an ne frage erinnert^^</p>
<p>bzw neue unklarheit:</p>
<pre><code class="language-cpp">BITMAP** frickelig = new BITMAP*[SIZE];
for (int k=0; k&lt;SIZE; ++k) {
   frickelig[k] = loadbitmap(...);
}
for (int k=0; k&lt;SIZE; ++k) {
   delete drickelig[k];
}
delete[] frickelig;
</code></pre>
<p>verstehe ich das richtig, dass bei nem pointer auf pointer ich echt 2 mal deleten muss?<br />
Oder würde es auch mit einem &quot;delete[]&quot; ohne die einzelnen deletes vorher funktionieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1868122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1868122</guid><dc:creator><![CDATA[kingcools2]]></dc:creator><pubDate>Fri, 12 Mar 2010 19:11:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Fri, 12 Mar 2010 19:14:43 GMT]]></title><description><![CDATA[<p>Du musst <strong>genau</strong> das deleten, was du vorher mit new angefordert hast. Keine Tricks, keine Ausnahmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1868124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1868124</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 12 Mar 2010 19:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Fri, 12 Mar 2010 19:23:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Du musst <strong>genau</strong> das deleten, was du vorher mit new angefordert hast. Keine Tricks, keine Ausnahmen.</p>
</blockquote>
<p>Naja. So streng würde ich das nicht sagen. Man muss wenigstens wissen, wer es frei gibt (und darauf sollte man sich nur verlassen, wenn es explizit genau so gesagt wird, dass es gemacht wird). Siehe z.B Smart Pointer. Da erzeugst du mit new, gibst es aber explizit nirgends mehr selbst wieder frei mit delete (ist ja genau die Aufgabe des Smart Pointers).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1868128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1868128</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 12 Mar 2010 19:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Fri, 12 Mar 2010 19:38:23 GMT]]></title><description><![CDATA[<p>kingcools2 schrieb:</p>
<blockquote>
<p>verstehe ich das richtig, dass bei nem pointer auf pointer ich echt 2 mal deleten muss?</p>
<p>Oder würde es auch mit einem &quot;delete[]&quot; ohne die einzelnen deletes vorher funktionieren?</p>
</blockquote>
<p>Nö. Wieso sollte es? Wenn ein Zeiger zerstört wird (und Du hast hier ja ein Array aus Zeigern) passiert rein gar nichts. Mit Deiner Logik wär auch das delete[] überflüssig und sobald der Zeiger <code>frickelig</code> &quot;stirbt&quot; (zB wenn die Funktion verlassen wird).</p>
<p>Automatische Müllabfuhr gibt's hier nicht. Du musst Dich schon selbst um den Dreck kümmern. Das heißt aber nicht, dass Du munter new/delete verwenden musst. Du kannst die &quot;Arbeit&quot; deligieren. Schönes Beispiel, aber eigentlich noch Zukunftsmusik: vector&lt;unique_ptr&lt;BITMAP&gt;&gt;.</p>
<p>Die Idee sollte aber klar sein: Statt manuell aufzupassen, haben wir die &quot;Arbeit&quot; deligiert. Ein unique_ptr fühlt sich verantwortlich für das, worauf er zeigt und löscht das Objekt ggf. Ein Vektor fühlt sich verantwortlich für die Verwaltung seiner Elemente. So kommst Du oft ohne new/delete aus (siehe CptCs Beispiel).</p>
<p>So etwas ähnliches bekommst Du auch über die Zeiger-Kontainer von Boost. Die fühlen sich auch verantwortlich für die Verwaltung der Elemente.</p>
<p>Fazit: Es gibt keine automatische Garbage Collection. Was tun? Erst keinen Müll erzeugen und die Verwaltung frühst möglich deligieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1868133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1868133</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 12 Mar 2010 19:38:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerfrage on Fri, 12 Mar 2010 23:17:40 GMT]]></title><description><![CDATA[<p>ok, danke schön, dann hab ich das bisher falsch gemacht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1868213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1868213</guid><dc:creator><![CDATA[kingcools2]]></dc:creator><pubDate>Fri, 12 Mar 2010 23:17:40 GMT</pubDate></item></channel></rss>