<?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[Array aus Pointer]]></title><description><![CDATA[<p>Hi !</p>
<p>Ich will nenn Array aus Pointern erstellen. Allerdings ein 2-dim.. Das will ich so machen:</p>
<pre><code class="language-cpp">Block** blocks; // in Header

// in cpp Datei
blocks = new Block*[width][height];
</code></pre>
<p>Okay ich erhalte folgende Fehlerausgabe vom Compiler:</p>
<pre><code>(gdb) make
g++ -g `pkg-config --cflags clanGL-0.7 clanDisplay-0.7 clanCore-0.7 clanApp-0.7 clanSound-0.7 clanMikMod-0.7 clanVorbis-0.7` `sdl-config --cflags` -c LevelRenderer/Level.cpp -o Level.o
LevelRenderer/Level.cpp: In constructor `Level::Level(int, int)':
LevelRenderer/Level.cpp:12: error: cannot convert `Block* (*)[((height - 1) +
   1)]' to `Block**' in assignment
make: *** [Level.o] Fehler 1
</code></pre>
<p>Wenn ich es so mache dann klappts:</p>
<pre><code class="language-cpp">blocks = new Block*[width * height]
</code></pre>
<p>Was ist beim ersten falsch denn ich kann mit der Compilermeldung nix anfangen.</p>
<p>mfg<br />
Tojm</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/121382/array-aus-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 16:45:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/121382.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Sep 2005 17:52:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 17:52:02 GMT]]></title><description><![CDATA[<p>Hi !</p>
<p>Ich will nenn Array aus Pointern erstellen. Allerdings ein 2-dim.. Das will ich so machen:</p>
<pre><code class="language-cpp">Block** blocks; // in Header

// in cpp Datei
blocks = new Block*[width][height];
</code></pre>
<p>Okay ich erhalte folgende Fehlerausgabe vom Compiler:</p>
<pre><code>(gdb) make
g++ -g `pkg-config --cflags clanGL-0.7 clanDisplay-0.7 clanCore-0.7 clanApp-0.7 clanSound-0.7 clanMikMod-0.7 clanVorbis-0.7` `sdl-config --cflags` -c LevelRenderer/Level.cpp -o Level.o
LevelRenderer/Level.cpp: In constructor `Level::Level(int, int)':
LevelRenderer/Level.cpp:12: error: cannot convert `Block* (*)[((height - 1) +
   1)]' to `Block**' in assignment
make: *** [Level.o] Fehler 1
</code></pre>
<p>Wenn ich es so mache dann klappts:</p>
<pre><code class="language-cpp">blocks = new Block*[width * height]
</code></pre>
<p>Was ist beim ersten falsch denn ich kann mit der Compilermeldung nix anfangen.</p>
<p>mfg<br />
Tojm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878060</guid><dc:creator><![CDATA[TomDaHomm]]></dc:creator><pubDate>Thu, 22 Sep 2005 17:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 18:09:04 GMT]]></title><description><![CDATA[<p>TomDaHomm schrieb:</p>
<blockquote>
<p>Hi !</p>
<p>Ich will nenn Array aus Pointern erstellen. Allerdings ein 2-dim.. Das will ich so machen:</p>
<pre><code class="language-cpp">Block** blocks; // in Header

// in cpp Datei
blocks = new Block*[width][height];
</code></pre>
</blockquote>
<p>Du kannst wenn du ein Array auf dem Heap anlegst maximal *eine* Dimension angeben. (Wenn du ein Array auf dem Stack anlegst, kannst du nur mehrere Dimensionen angeben, sofern diese zur compile-time bekannt sind. Desweiteren kannst du bei auf dem Stack erzeugten Arrays die Dimension, die am weitesten links steht, weglassen bzw. musst sie nicht angeben)<br />
Um ein 2D-Array aus Zeigern auf Block dynamisch anzulegen, kannst du es so machen:</p>
<pre><code class="language-cpp">Block*** blocks = new Block**[width]; // 1. Dimension.
for(size_t i = 0; i &lt; width; ++i)
    blocks[i] = new Block*[height]; // 2. Dimension.
</code></pre>
<p>Jetzt kannst du Adressen in diesem 2d-Vektor abspeichern. Z.B. wenn x &lt; width &amp;&amp; y &lt; height ist folgender Code legal:</p>
<pre><code class="language-cpp">Block my_block;
blocks[x][y] = &amp;my_block;
</code></pre>
<p>/edit: Trotzdem ist es hier imho angebracht über Alternativen nachzudenken (z.B. std::vector&lt;std::vector&lt;Block*&gt; &gt;).</p>
<p>Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878066</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 22 Sep 2005 18:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 18:28:25 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &quot;Level.h&quot;

Level::Level( int WIDTH , int HEIGHT ) {

    int width = WIDTH;
    int height = HEIGHT;

    basicBlocks = new vector&lt;Block*&gt;();
    level_blocks = new vector&lt;Block*&gt;();
    enemies = new vector&lt;Enemy*&gt;();

    //in Header siehts so aus: Block*** blocks;
    blocks = new Block**[height];
    for( int j = 0 ; j &lt; height ; ++j ) 
        blocks[j] = new Block*[width];

    null_level_blocks();
}

void Level::set_size( int WIDTH , int HEIGHT ) {

    width = WIDTH;
    height = HEIGHT;

}

void Level::null_level_blocks() {

    for( int i = 0 ; i &lt; height ; ++i )
        for( int j = 0 ; j &lt; width ; ++j )
            blocks[i][j] = 0;

}
</code></pre>
<p>Wie Du siehst hab ich schon vectoren benutzt. Allerdings habe ich dadurch starke Geschwindigkeitseinbußen. Mittels einen 2dim Arrays aus Pointer kann ich das ganze sehr viel schneller machen. Allerdings verstehe ich nicht warum ich in null_level_blocks() einen sigmentation fault erhalte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878089</guid><dc:creator><![CDATA[tttttttttttt]]></dc:creator><pubDate>Thu, 22 Sep 2005 18:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 18:29:27 GMT]]></title><description><![CDATA[<p>Bei der Gelegenheit hätte ich auch noch ne Frage dazu.<br />
Das betrifft die Freigabe des Speichers.</p>
<p>Und zwar, wenn man einen solchen 2 Dimensionalen Array wieder freigeben will, macht man das nun für jedes Element einzeln:</p>
<pre><code class="language-cpp">unsigned int i = 0;
for (i = 0; i &lt; anzahlElemente; i++)
    delete blocks[i];
</code></pre>
<p>oder mit dem Array Operator (oder wie das auch immer heissen mag):</p>
<pre><code class="language-cpp">delete[] blocks;
</code></pre>
<p>Wann benutz ich was?<br />
Irgendwie ist mir das noch nicht so klar.</p>
<p>MfG</p>
<p>Vic</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878090</guid><dc:creator><![CDATA[_Vic_]]></dc:creator><pubDate>Thu, 22 Sep 2005 18:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 18:32:07 GMT]]></title><description><![CDATA[<p>ach verdammt ich ab width und height vertauscht. Alles klar jetzt klapps</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878093</guid><dc:creator><![CDATA[tttttttttt]]></dc:creator><pubDate>Thu, 22 Sep 2005 18:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 18:44:47 GMT]]></title><description><![CDATA[<p><em>Vic</em> schrieb:</p>
<blockquote>
<p>Bei der Gelegenheit hätte ich auch noch ne Frage dazu.<br />
Das betrifft die Freigabe des Speichers.</p>
<p>Und zwar, wenn man einen solchen 2 Dimensionalen Array wieder freigeben will, macht man das nun für jedes Element einzeln:</p>
<pre><code class="language-cpp">unsigned int i = 0;
for (i = 0; i &lt; anzahlElemente; i++)
    delete blocks;
</code></pre>
<ul>
<li></li>
</ul>
<p>oder mit dem Array Operator (oder wie das auch immer heissen mag):</p>
<pre><code class="language-cpp">delete[] blocks;
</code></pre>
<p>Wann benutz ich was?<br />
Irgendwie ist mir das noch nicht so klar.</p>
<p>MfG</p>
<p>Vic*</p>
</blockquote>
<ul>
<li></li>
</ul>
<p>Beide Varianten sind hier falsch. <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>Grundsätzliches:<br />
Wenn du einen Speicherbereich mit [i]new* anforderst musst du ihn mit <em>delete</em> wieder freigeben. Wenn du dagegen einen Speicherbereich mit <em>new[]</em> anforderst musst du ihn mit <em>delete[]</em> freigeben.</p>
<p>Bei einer Reservierung der folgenden Art:</p>
<pre><code class="language-cpp">Block*** blocks = new Block**[width]; // Speicher mit new[] angefordert. (1. Dimension)
for(size_t i = 0; i &lt; width; ++i)
    blocks[i] = new Block*[height]; // Speicher wird mit new[] angefordert (2. Dimension)
</code></pre>
<p>gibst du ihn wie folgt frei:</p>
<pre><code class="language-cpp">for(size_t i = 0; i &lt; width; ++i)
    delete[] blocks[i]; // Speicher wird mit delete[] freigeben (2.Dimension)
delete[] blocks; // Speicher mit delete[] freigeben (1. Dimension)
</code></pre>
<p>Für jedes new[] in der entsprechenden Dimension rufst du das delete[] auch wieder auf.</p>
<p>Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878099</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Thu, 22 Sep 2005 18:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 22:32:32 GMT]]></title><description><![CDATA[<p>Hatten wir doch erst letztens<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-121040.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-121040.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/878219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878219</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 22 Sep 2005 22:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Thu, 22 Sep 2005 22:51:36 GMT]]></title><description><![CDATA[<p>Hiho !</p>
<p>kann mir jemand sagen wie ich aus einem</p>
<pre><code class="language-cpp">char tmp[256];
</code></pre>
<p>ein</p>
<pre><code class="language-cpp">char tmp[13];
</code></pre>
<p>mache ?</p>
<p>Danke, Lilo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878227</guid><dc:creator><![CDATA[Char-Array verkleinern]]></dc:creator><pubDate>Thu, 22 Sep 2005 22:51:36 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Fri, 23 Sep 2005 00:18:32 GMT]]></title><description><![CDATA[<p>nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878233</guid><dc:creator><![CDATA[c.rackwitz]]></dc:creator><pubDate>Fri, 23 Sep 2005 00:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Array aus Pointer on Fri, 23 Sep 2005 11:06:45 GMT]]></title><description><![CDATA[<p>Sowas geht nicht, ist aber auch unnötig. Wozu willst du denn das Array verkleinern, 13 Zeichen Platz hast du auch im ursprünglichen Array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/878478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/878478</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 23 Sep 2005 11:06:45 GMT</pubDate></item></channel></rss>