<?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[Deklaration eines zweidimensionalen Arrays mit new]]></title><description><![CDATA[<p>Ich habe versucht, ein zweidimensionales Array zu deklarieren, aber es ist wohl falsch:</p>
<pre><code class="language-cpp">int **array = new int[3][5];
</code></pre>
<p>Wie macht man's richtig?</p>
<p>Und was das Löschen betrifft: Würde <code>delete[] array;</code> oder muss man irgendwas von wegen <code>delete[][] array;</code> machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277572/deklaration-eines-zweidimensionalen-arrays-mit-new</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 19:10:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277572.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Nov 2010 21:52:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 21:52:57 GMT]]></title><description><![CDATA[<p>Ich habe versucht, ein zweidimensionales Array zu deklarieren, aber es ist wohl falsch:</p>
<pre><code class="language-cpp">int **array = new int[3][5];
</code></pre>
<p>Wie macht man's richtig?</p>
<p>Und was das Löschen betrifft: Würde <code>delete[] array;</code> oder muss man irgendwas von wegen <code>delete[][] array;</code> machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983475</guid><dc:creator><![CDATA[Daimond]]></dc:creator><pubDate>Sat, 20 Nov 2010 21:52:57 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 22:00:49 GMT]]></title><description><![CDATA[<p>Dynamische, zweidimensionale Arrays gibts nicht, man nimmt ein eindimensionales und berechnet dann jedesmal den Index mit <code>y*width+x</code> . Dann reicht auch ein stinknormales <code>delete[]</code> .<br />
Oder man verwendet <a href="http://www.boost.org/libs/multi_array/" rel="nofollow">Boost.MutiArray</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983479</guid><dc:creator><![CDATA[Der Mond]]></dc:creator><pubDate>Sat, 20 Nov 2010 22:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 22:06:43 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Schaut mal in die FAQ<br />
<a href="http://www.c-plusplus.net/forum/39489" rel="nofollow">http://www.c-plusplus.net/forum/39489</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983482</guid><dc:creator><![CDATA[Braunstein off]]></dc:creator><pubDate>Sat, 20 Nov 2010 22:06:43 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 22:10:13 GMT]]></title><description><![CDATA[<p>Wenn beide Dimensionen bekannt sind, reicht</p>
<pre><code class="language-cpp">int a[3][5];
</code></pre>
<p>Ist nur die innere bekannt, ginge</p>
<pre><code class="language-cpp">int (*a)[5] = new int[dim_x][5];

// ...

delete[] a;
</code></pre>
<p>Ist keine bekannt, gibt es eine Reihe von Möglichkeiten. Boost hat eine Multi-Array-Bibliothek, die einen Blick wert sein dürfte, ansonsten wäre etwas in dieser Art eine einfache Möglichkeit:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

template&lt;typename T&gt;
class array2d {
public:
  typedef T                 value_type;
  typedef value_type       *pointer;
  typedef value_type const *const_pointer;
  typedef std::size_t       size_type;

  array2d(size_type dim_x, size_type dim_y)
    : dim_y_(dim_y),
      data_(dim_x * dim_y) { }

        pointer operator[](size_type x)       { return &amp;data_[x * dim_y_]; }
  const_pointer operator[](size_type x) const { return &amp;data_[x * dim_y_]; }

private:
  size_type               dim_y_;
  std::vector&lt;value_type&gt; data_;
};

// ...

array2d&lt;int&gt; a(x, y);

// keine Freigabe notwendig (RAII)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1983487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983487</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 20 Nov 2010 22:10:13 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 22:15:50 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>ansonsten wäre etwas in dieser Art eine einfache Möglichkeit:</p>
<pre><code class="language-cpp">pointer operator[](size_type x)       { return &amp;data_[x * dim_y_]; }
const_pointer operator[](size_type x) const { return &amp;data_[x * dim_y_]; }
</code></pre>
</blockquote>
<p>Igitt!</p>
<p>Wenn dann lieber sowas:</p>
<pre><code class="language-cpp">typedef T                 value_type;
typedef value_type       &amp;reference;
typedef value_type const &amp;const_reference;
typedef std::size_t       size_type;

      reference operator()(size_type x, size_type y)       { return data_[y*dim_x_+x]; }
const_reference operator()(size_type x, size_type y) const { return data_[y*dim_x_+x]; }
</code></pre>
<p>Siehe: <a href="http://www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.11" rel="nofollow">http://www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.11</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983488</guid><dc:creator><![CDATA[Der Mond]]></dc:creator><pubDate>Sat, 20 Nov 2010 22:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 22:26:17 GMT]]></title><description><![CDATA[<p>...der Text hinter dem Link besagt, dass der operator()-Ansatz für zerstreute Matrizen sinnvoller ist. Das ist zwar richtig, hat aber für diesen Anwendungsfall keinerlei Bedeutung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983490</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 20 Nov 2010 22:26:17 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sat, 20 Nov 2010 23:34:23 GMT]]></title><description><![CDATA[<p>Hier ein kleines Beispiel für ein 2D Array:</p>
<pre><code class="language-cpp">//	Dynamic array 2D
#include &lt;iostream&gt;
#include &lt;conio.h&gt;
using namespace std;
double ** make2dFeld(int ,int );
void init2dFeld(double **,int,int);
void show2dFeld(double **,int,int);
void delete2dFeld(double **,int); 
int main()
{
  int     n,m,i,j;
  double  **b;          

  cout &lt;&lt; &quot;  Eingabe Zeilen  n : &quot;;  cin &gt;&gt; n;
  cout &lt;&lt; &quot;  Eingabe Spalten m : &quot;;  cin &gt;&gt; m;

  b =  make2dFeld(n,m);      

  init2dFeld(b,n,m);        
  show2dFeld(b,n,m);        
  delete2dFeld(b,n);        

  getch();
  return 0;

}
//----------------------------------------------------------------------
double ** make2dFeld(int z,int s)
{
    double **b;
    b = new (double* [z]);     
    for (int i = 0; i &lt; z; i++)
    {
        b[i] = new double[s];    
    }
    return b;
}
//----------------------------------------------------------------------
void init2dFeld(double **b,int z,int s)
{
    for (int i = 0; i &lt; z; i++ )   
    {
        for (int j = 0; j &lt; s; j++)
        {
            b[i][j] = (i+1)*(j+1);
        }
   }
}
//----------------------------------------------------------------------
void show2dFeld(double **b,int z,int s)
{
    for (int i = 0; i &lt; z; i++ )    
    {
        for (int j = 0; j &lt; s; j++)
        {
            cout&lt;&lt;b[i][j]&lt;&lt;',';
        }
        cout&lt;&lt;endl;
   }
}
//----------------------------------------------------------------------
void delete2dFeld(double **b,int z)
{
    for (int i=0; i&lt;z; i++)
    {
        delete []  b[i];            
    }
    delete [] b;  
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1983506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983506</guid><dc:creator><![CDATA[Cybertec]]></dc:creator><pubDate>Sat, 20 Nov 2010 23:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 08:34:01 GMT]]></title><description><![CDATA[<blockquote>
<p>make2dFeld<br />
init2dFeld<br />
show2dFeld<br />
delete2dFeld</p>
</blockquote>
<p>Entweder Deutsch oder Englisch. Entscheide dich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983532</guid><dc:creator><![CDATA[Denglisch]]></dc:creator><pubDate>Sun, 21 Nov 2010 08:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 08:37:29 GMT]]></title><description><![CDATA[<p>Denglisch schrieb:</p>
<blockquote>
<blockquote>
<p>make2dFeld<br />
init2dFeld<br />
show2dFeld<br />
delete2dFeld</p>
</blockquote>
<p>Entweder Deutsch oder Englisch. Entscheide dich...</p>
</blockquote>
<p>Troll wo anders!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983533</guid><dc:creator><![CDATA[Cybertec]]></dc:creator><pubDate>Sun, 21 Nov 2010 08:37:29 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 13:57:08 GMT]]></title><description><![CDATA[<p>Cybertec schrieb:</p>
<blockquote>
<p>Troll wo anders!</p>
</blockquote>
<p>Nur nicht gleich persönlich nehmen. Auch wenn es kein entscheidender Punkt ist: Dieses Bezeichnergemisch finde ich auch grauenhaft.</p>
<p>Aber um noch wichtigere Dinge zu nennen: Dein Code ist ziemlicher C-Style. Der Benutzer wird zu manueller Speicherverwaltung gezwungen. Er muss sich die Arraygrösse jeweils separat merken und hat beim Zugriff null Sicherheit. In einer Klasse gekapselt könnte man diese Probleme stark dezimieren.</p>
<p>Davon abgesehen ist es relativ ineffizient, viele kleine Allokationen für die Unter-Arrays zu haben (es sei denn, das Array ist wirklich gross). Wahrscheinlich wäre ein 1D-Array mit interner Indexumrechnung angebrachter.</p>
<p>Wenn kein wesentlicher Grund dagegen spricht, würde ich ohnehin getesteten Code wiederverwenden. Also <code>boost::multi_array</code> oder mindestens <code>std::vector</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983634</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Nov 2010 13:57:08 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 14:33:25 GMT]]></title><description><![CDATA[<p>Der Code war noch aus meiner Schulzeit, und der Lehrer dort kennt kein vector, geschweige denn irgendwas aus der STL. Dort gibt es nur &quot;C mit Klassen&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <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>
<p>Wir mussten es so machen, auch wenn es sich unglaublich anhört.</p>
<p>Gut, die Namen hätten wirklich entweder deutsch oder englisch sein können, aber zur Demo ist es denk ich mal egal.</p>
<p>Und, sowas würde ich natürlich nie so machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983657</guid><dc:creator><![CDATA[Cybertec]]></dc:creator><pubDate>Sun, 21 Nov 2010 14:33:25 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 14:44:00 GMT]]></title><description><![CDATA[<p>Cybertec schrieb:</p>
<blockquote>
<p>Der Code war noch aus meiner Schulzeit, und der Lehrer dort kennt kein vector, geschweige denn irgendwas aus der STL. Dort gibt es nur &quot;C mit Klassen&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <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>
<p>Wir mussten es so machen, auch wenn es sich unglaublich anhört.</p>
<p>Gut, die Namen hätten wirklich entweder deutsch oder englisch sein können, aber zur Demo ist es denk ich mal egal.</p>
<p>Und, sowas würde ich natürlich nie so machen.</p>
</blockquote>
<p>Das ist leider bittere Realität... Aber dann solltest du es jetzt besser machen als dein Lehrer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983661</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sun, 21 Nov 2010 14:44:00 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 14:46:28 GMT]]></title><description><![CDATA[<p>Der TE wollte doch aber wissen wie es funktioniert mit new und delete, und eigentlich dachte ich dass das Beispiel es gut zeigt.</p>
<p>Klar macht man das so nicht, das weis ich auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983664</guid><dc:creator><![CDATA[Cybertec]]></dc:creator><pubDate>Sun, 21 Nov 2010 14:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 14:47:31 GMT]]></title><description><![CDATA[<p>Ich tendiere auch zu einfachen Beispielen, jedoch erntet man dann immer viel Kritik <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/1983666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983666</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sun, 21 Nov 2010 14:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 14:52:01 GMT]]></title><description><![CDATA[<p>Cybertec schrieb:</p>
<blockquote>
<p>Klar macht man das so nicht, das weis ich auch.</p>
</blockquote>
<p>Genau da liegt das Problem. Du weisst, dass man es so nicht macht, zeigt es aber und verkaufst es, als würde man es genau so machen. Ein Anfänger kann diesen Unterschied nicht selber erkennen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983671</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 21 Nov 2010 14:52:01 GMT</pubDate></item><item><title><![CDATA[Reply to Deklaration eines zweidimensionalen Arrays mit new on Sun, 21 Nov 2010 16:56:10 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Cybertec schrieb:</p>
<blockquote>
<p>Klar macht man das so nicht, das weis ich auch.</p>
</blockquote>
<p>Genau da liegt das Problem. Du weisst, dass man es so nicht macht, zeigt es aber und verkaufst es, als würde man es genau so machen. Ein Anfänger kann diesen Unterschied nicht selber erkennen.</p>
<p>Grüssli</p>
</blockquote>
<p>Jo, klar, nur wenn der TE fragt wie man einen string mit chars macht, dann erklär ich nicht wie es funktioniert mit std::string. <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>
<p>Naja, egal, das Beispiel war Mist, und jetzt sollte er wissen das man es SO nicht macht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1983744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1983744</guid><dc:creator><![CDATA[Cybertec]]></dc:creator><pubDate>Sun, 21 Nov 2010 16:56:10 GMT</pubDate></item></channel></rss>