<?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[Zugriff auf Arrays]]></title><description><![CDATA[<p>Ich bin absoluter Neuling und versuche das Spiel Snake nachzuvollziehen.</p>
<p>Als erstes baue ich im Konstruktor ein Array das je nach Eingabegrößen die feldanzahl festlegt:</p>
<p>(...)<br />
FELDELEMENT* m_pSpielfeld = new FELDELEMENT[m_iBreite<em>m_iHoehe];<br />
for(i=0; i&lt;(n_iBreite</em>n_iHoehe); i++)<br />
{<br />
m_pSpielfeld[i]=LEER;<br />
}</p>
<p>in einer Methode möchte ich dann die art eines bestimmten Feldes auslesen (LEER,SCHLANGE, MAUS oder FEHLER)</p>
<p>dafür:<br />
FELDELEMENT CSpielfeld::getFeld(int n_iX, int n_iY)<br />
{<br />
if((n_iX&lt;=m_iBreite)&amp;&amp;(n_iY&lt;=m_iHoehe))<br />
return m_pSpielfeld[m_iBreite*n_iY+n_iX]; //!!!<br />
else<br />
return FEHLER;<br />
}</p>
<p>Wundersamerweise klappt es nicht, der debugger meldet an markierter stelle:<br />
Unbehandelte Ausnahme bei 0x0041499a in CSpielfeld.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00000000.</p>
<p>kann jemand mir weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163880/zugriff-auf-arrays</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 12:37:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163880.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Nov 2006 18:52:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 18:52:15 GMT]]></title><description><![CDATA[<p>Ich bin absoluter Neuling und versuche das Spiel Snake nachzuvollziehen.</p>
<p>Als erstes baue ich im Konstruktor ein Array das je nach Eingabegrößen die feldanzahl festlegt:</p>
<p>(...)<br />
FELDELEMENT* m_pSpielfeld = new FELDELEMENT[m_iBreite<em>m_iHoehe];<br />
for(i=0; i&lt;(n_iBreite</em>n_iHoehe); i++)<br />
{<br />
m_pSpielfeld[i]=LEER;<br />
}</p>
<p>in einer Methode möchte ich dann die art eines bestimmten Feldes auslesen (LEER,SCHLANGE, MAUS oder FEHLER)</p>
<p>dafür:<br />
FELDELEMENT CSpielfeld::getFeld(int n_iX, int n_iY)<br />
{<br />
if((n_iX&lt;=m_iBreite)&amp;&amp;(n_iY&lt;=m_iHoehe))<br />
return m_pSpielfeld[m_iBreite*n_iY+n_iX]; //!!!<br />
else<br />
return FEHLER;<br />
}</p>
<p>Wundersamerweise klappt es nicht, der debugger meldet an markierter stelle:<br />
Unbehandelte Ausnahme bei 0x0041499a in CSpielfeld.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0x00000000.</p>
<p>kann jemand mir weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167210</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 18:52:15 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 19:00:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">FELDELEMENT* m_pSpielfeld = new FELDELEMENT[m_iBreite*m_iHoehe];
</code></pre>
<p>Da ich davon ausgehe, dass m_pSpielfeld eigentlich eine Membervariable ist, liegt wohl da der Fehler. Du weist einem lokalen Pointer das neu erzeugte Array zu, eigentlich sollte wohl die Membervariable die Adresse erhalten.</p>
<p>Übrigens, Code-Tags helfen dabei, das ganze lesbar zu halten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167215</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Thu, 02 Nov 2006 19:00:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 19:04:23 GMT]]></title><description><![CDATA[<p>Ja, es soll eine Membervariable sein, zumindest habe ich sie als solche in der headerdatei deklariert.<br />
Warum erhält sie nicht die Adresse?<br />
anders gefragt: wie mache ich es korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167217</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 19:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 19:08:36 GMT]]></title><description><![CDATA[<p>du legst ein Feld an von der Grösse m_iBreite*m_iHoehe.<br />
D.h. von 0 bis</p>
<pre><code class="language-cpp">m_iBreite*m_iHoehe-1
</code></pre>
<p>in den Ausdrücken in der if-Abfrage musst du daher schreiben:</p>
<pre><code class="language-cpp">if((n_iX &lt; m_iBreite)&amp;&amp;(n_iY &lt; m_iHoehe))
</code></pre>
<p>und nicht &lt;= , da du sonst über die Feldgrenzen hinausschießen könntest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167220</guid><dc:creator><![CDATA[mound]]></dc:creator><pubDate>Thu, 02 Nov 2006 19:08:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 19:13:42 GMT]]></title><description><![CDATA[<p>und damit ich auch die Adresse der Membervariable erreiche schreibe ich:<br />
[cpp]<br />
m_pSpielfeld = new FELDELEMENT[m_iBreite*m_iHoehe];</p>
<p>Korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167225</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 19:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 19:51:58 GMT]]></title><description><![CDATA[<p>milian84 schrieb:</p>
<blockquote>
<p>und damit ich auch die Adresse der Membervariable erreiche schreibe ich:</p>
<pre><code class="language-cpp">m_pSpielfeld = new FELDELEMENT[m_iBreite*m_iHoehe];
</code></pre>
<p>Korrekt?</p>
</blockquote>
<p>Korrekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167242</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Thu, 02 Nov 2006 19:51:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 20:11:44 GMT]]></title><description><![CDATA[<p>danke für die schnellen und hilfreichen antworten.</p>
<p>ich habe nun ein weiteres problem:</p>
<p>wie übergebe ich die adresse von m_pSpielfeld an eine andere klasse und zwar mittels des konstruktor, also über main()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167261</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 20:11:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 20:19:23 GMT]]></title><description><![CDATA[<p>milian84 schrieb:</p>
<blockquote>
<p>danke für die schnellen und hilfreichen antworten.</p>
<p>ich habe nun ein weiteres problem:</p>
<p>wie übergebe ich die adresse von m_pSpielfeld an eine andere klasse und zwar mittels des konstruktor, also über main()?</p>
</blockquote>
<p>Du übergibst das Element einer <em>Funktion</em> mit func(m_pSpielfeld).<br />
Funktionen kannst du eigentlich überall aufrufen, aber main() kann kein Konstruktur einer Klasse sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167269</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Thu, 02 Nov 2006 20:19:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 20:24:30 GMT]]></title><description><![CDATA[<p>sorry, hatte mich nicht genau ausgedrückt.<br />
Ich rufe in main() einen konstruktor auf, der einen Zeiger übergeben soll. Dieser Zeiger soll eben auf das aktuelle Spielfeld, also m_pSpielfeld. Wie bekomme ich jetzt aus der Klasse CSpielfeld raus, wo m_pSpielfeld steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167274</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 20:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 21:26:39 GMT]]></title><description><![CDATA[<p>konkret:</p>
<p>Ich habe eine Klasse A in der ich über eine Membervariabele m_pZeiger ein Array definiert habe. Dies habe mit einem neuen Datentypen gefüllt.<br />
Ich habe eine weitere Klasse B definiert in der ich einzelne Daten des Array aus Klasse A ändern möchte. Dazu möchte ich mit dem Konstruktor für Klasse B einen Zeiger auf die Klasse A und damit auf den Anfang des Arrays übergeben.<br />
Wie stelle ich das an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167304</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Thu, 02 Nov 2006 21:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Thu, 02 Nov 2006 21:40:49 GMT]]></title><description><![CDATA[<p>Bei &quot;guter&quot; objektorientierter Programmierung sollte eigentlich keine Klasse B die Memberdaten von Klasse A ändern dürfen!</p>
<p>Aber mir fallen konkret 2 Möglichkeiten ein:<br />
- Du übergibst der Klasse B einen Pointer auf die Klasse A. Klasse B ruft Memberfunktionen der Klasse A auf, welche die Daten verändert.<br />
- Du baust die Funktionalität der Klasse B (k.A. wie komplex die ist und ob das sinnvoll ist) in Memberfunktionen der Klasse A ein, da die Klasse B ja Daten der Klasse A verändern soll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167312</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Nov 2006 21:40:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Fri, 03 Nov 2006 08:12:12 GMT]]></title><description><![CDATA[<p>ich will möglichkeit 1 machen.<br />
die klasse die verändert werden soll heißt zb CSpielfeld. Mit CMaus möchte ich das verändern. Jetzt habe ich in main den konstruktor so geschrieben:<br />
CMaus NeueMaus(CSpielfeld* n_pSpielfeld)<br />
ich komme aber einfach nicht drauf welchen Wert ich für CSpielfeld* (...) übergeben soll. Es muss ja ein Zeiger auf den Anfang des Arrays aus CSpielfeld sein. Also muss es ja die Adresse vom ersten Element sein, oder?<br />
Und wie krieg ich die aus CSpielfeld raus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167452</guid><dc:creator><![CDATA[milian84]]></dc:creator><pubDate>Fri, 03 Nov 2006 08:12:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Fri, 03 Nov 2006 08:38:17 GMT]]></title><description><![CDATA[<p>nein du willst nicht das array sondern die klasse übergeben.<br />
außerdem würde ich eine referenz statt einem zeiger nehmen, das ist einfacher.</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167476</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Fri, 03 Nov 2006 08:38:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriff auf Arrays on Fri, 03 Nov 2006 14:33:28 GMT]]></title><description><![CDATA[<p>Wie asdasdasd (^^) schon sagt, du übergibst einen Verweis (egal ob Referenz oder Zeiger) auf die Klasse an CMaus. CMaus kann jetzt mit der Klasse CSpielfeld interagieren, allerdings sollte das wirklich <strong>nur</strong> über Member-Funktionen passieren.<br />
Du könntest in deine CSpielfeld-Klasse doch ne Funktion <em>SetField( x, y, Wert )</em> einbauen. Darin prüfst du dann x und y auf die Grenzwerte vom Spielfeld und Wert auf Validität.<br />
Dann kannst du bequem und <strong>sicher</strong> mit der CMaus-Klasse das Spielfeld modifizieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1167750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1167750</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 03 Nov 2006 14:33:28 GMT</pubDate></item></channel></rss>