<?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[Konstruktor und Destruktor für 2d char Arrays]]></title><description><![CDATA[<p>Hi,<br />
ich versuche gerade aus einem alten C TicTacToe Prog ein C++ Prog zu basteln.<br />
Das funktioniert bis jetzt auch recht gut. Das einzige was nicht funktionieren will ist das deleten des 2d Arrays.<br />
So schauen meine Kon-/Destruktor aus:</p>
<pre><code class="language-cpp">Board::Board(){
      for(int i = 0 ; i &lt; 3 ; i++){
          for (int j = 0; j &lt; 3; j++){
			GameBoard[i][j] = _strdup(&quot; &quot;);
		  }    
      }
	  Player1 = _strdup(&quot;X&quot;);
      Player2 = _strdup(&quot;O&quot;);
}      
Board::~Board(){
      delete [] &amp;GameBoard;
      delete Player1;
      delete Player2;
}
</code></pre>
<p>GameBoard ist in der Class Board als char * Gameboard[3][3] definiert.</p>
<p>Nach dem ich ein wenig rumgegooglet hatte hab ich ein Bsp für int Arrays<br />
gefunden, und dieses für char umgeschrieben.</p>
<pre><code class="language-cpp">Test_C::Test_C(){
       x = 3;
       y = 3;
       Matrix = new char *[x];
       for(inti=0; i&lt;x; i++){
           Matrix[i] = new char *[y];
       }
}
Test_C::~Test_C(){
       int i;
       for (i = 0; i &lt; x; i++){
           delete [] Matrix[i];
       }
       delete [] Matrix;
}
</code></pre>
<p>wobei Matrix als char **Matrix; definiert ist. Das Funktioniert leider auch nicht. Ich bekommen nur noch mehr Fehlermeldungen(konvertierung von char[*][3] nach char [3][3] nicht erlaubt, oder so)<br />
Kennt jemand eine funktionierende variante wie man sowas richtig initalisiert.</p>
<p>Schon mal Danke<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197137/konstruktor-und-destruktor-für-2d-char-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 01:17:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197137.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Nov 2007 11:39:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 11:39:40 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich versuche gerade aus einem alten C TicTacToe Prog ein C++ Prog zu basteln.<br />
Das funktioniert bis jetzt auch recht gut. Das einzige was nicht funktionieren will ist das deleten des 2d Arrays.<br />
So schauen meine Kon-/Destruktor aus:</p>
<pre><code class="language-cpp">Board::Board(){
      for(int i = 0 ; i &lt; 3 ; i++){
          for (int j = 0; j &lt; 3; j++){
			GameBoard[i][j] = _strdup(&quot; &quot;);
		  }    
      }
	  Player1 = _strdup(&quot;X&quot;);
      Player2 = _strdup(&quot;O&quot;);
}      
Board::~Board(){
      delete [] &amp;GameBoard;
      delete Player1;
      delete Player2;
}
</code></pre>
<p>GameBoard ist in der Class Board als char * Gameboard[3][3] definiert.</p>
<p>Nach dem ich ein wenig rumgegooglet hatte hab ich ein Bsp für int Arrays<br />
gefunden, und dieses für char umgeschrieben.</p>
<pre><code class="language-cpp">Test_C::Test_C(){
       x = 3;
       y = 3;
       Matrix = new char *[x];
       for(inti=0; i&lt;x; i++){
           Matrix[i] = new char *[y];
       }
}
Test_C::~Test_C(){
       int i;
       for (i = 0; i &lt; x; i++){
           delete [] Matrix[i];
       }
       delete [] Matrix;
}
</code></pre>
<p>wobei Matrix als char **Matrix; definiert ist. Das Funktioniert leider auch nicht. Ich bekommen nur noch mehr Fehlermeldungen(konvertierung von char[*][3] nach char [3][3] nicht erlaubt, oder so)<br />
Kennt jemand eine funktionierende variante wie man sowas richtig initalisiert.</p>
<p>Schon mal Danke<br />
Dennis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399054</guid><dc:creator><![CDATA[DD2K]]></dc:creator><pubDate>Wed, 07 Nov 2007 11:39:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 11:46:18 GMT]]></title><description><![CDATA[<p>_strdup() ist keine Standardfunktion und vermutlich auf C-Bedürfnisse zugeschnitten - sprich: die angeforderten C-Strings mußt du vermutlich mit free() freigeben. Aber ich würde dir empfehlen, statt der char-Zeiger lieber std::string zu verwenden (wobei - hier reicht es wohl auch, einzelne char's zu speichern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399057</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 07 Nov 2007 11:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 11:59:36 GMT]]></title><description><![CDATA[<p>ok<br />
wenn ich free() benutze und das prog ausführe, bekomme am ende einen fehler in der<br />
dbgheap.c . Ich vermute mal, das kommt dadurch das der speicher nicht richtig freigegeben wird.</p>
<p>Werde es mal mit den std::strins versuchen.<br />
Die ich doch mit String.erase(0,String.lenght()); freigeben, oder reicht da auch delete?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399066</guid><dc:creator><![CDATA[DD2K]]></dc:creator><pubDate>Wed, 07 Nov 2007 11:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 12:07:25 GMT]]></title><description><![CDATA[<p>DD2K schrieb:</p>
<blockquote>
<p>Die ich doch mit String.erase(0,String.lenght()); freigeben, oder reicht da auch delete?</p>
</blockquote>
<pre><code class="language-cpp">std::string foo(&quot;bar&quot;);
</code></pre>
<p>feddich, mehr brauchste nich. lies mal ein c++-tutorial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399073</guid><dc:creator><![CDATA[gadgeto]]></dc:creator><pubDate>Wed, 07 Nov 2007 12:07:25 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 12:08:56 GMT]]></title><description><![CDATA[<p>DD2K schrieb:</p>
<blockquote>
<p>Die ich doch mit String.erase(0,String.lenght()); freigeben, oder reicht da auch delete?</p>
</blockquote>
<p>die brauchst du gar nicht freigeben - das macht deren eigener Destruktor, wenn dein Objekt vernichtet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399075</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 07 Nov 2007 12:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 12:14:07 GMT]]></title><description><![CDATA[<p>Alles klar,<br />
dank euch</p>
<p>MFG<br />
Dennis</p>
<p>Ich sollte wirklich wieder mal in meine Bücher schauen <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/1399081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399081</guid><dc:creator><![CDATA[DD2K]]></dc:creator><pubDate>Wed, 07 Nov 2007 12:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 12:39:06 GMT]]></title><description><![CDATA[<p>Auch wenn das Problem hier schon gelöst zu sein scheint, will ich trotzdem noch meinen Senf dazu geben (mein Espresso ist mir noch zu heiß):</p>
<p>Es ist bei TicTacToe doch m.E. überhaupt nicht sinnvoll, dynamischen Speicher zu verwenden (ob nun via new, oder als std::string). Das Spielfeld hat eine (zur compile-Zeit) bekannte Größe: 3 x 3 = 9 Felder. Und auf dem Stack sind diese neun Bytes auch nicht wirklich schmerzhaft.</p>
<p>Demnach reicht es, der Board-Klasse ein entsprechendes Attribut mitzugeben.<br />
(als eindimensionales Beispiel)</p>
<pre><code class="language-cpp">class TTTBoard
{
    char fields[9];
    // ...
};
</code></pre>
<p>Adressierbar durch y * 3 + x (wobei 0 &gt;= (x, y) &lt;= 2).</p>
<p>Dadurch, dass hier kein dynamischer Speicher angefordert wird, entfällt auch das Freigeben - welches dann ebenfalls automatisch erfolgt, sobald das Board-Objekt &quot;out of scope&quot; fällt.</p>
<p>Grüße...</p>
<p>Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399101</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Wed, 07 Nov 2007 12:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor für 2d char Arrays on Wed, 07 Nov 2007 13:26:50 GMT]]></title><description><![CDATA[<p>oder gleich:</p>
<pre><code class="language-cpp">char fields[3][3];
</code></pre>
<p>ohne eigene Indexberechnung...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399155</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Wed, 07 Nov 2007 13:26:50 GMT</pubDate></item></channel></rss>