<?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[Zugriffsverletzung beim rausspringen aus Methode]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme eine Fehlermeldung, die ich mir absolut nicht erklären kann.</p>
<pre><code class="language-cpp">class A {
      	protected:
      	double  itsVar;

	public:
	double getVar();
}

class B : public A{
}

class C: public B{
}

double A::getVar() {
     return itsVar;
}
</code></pre>
<p>Ich bekomme dann beim rausspringen aus der Methode getVar() eine Zugriffsverletzung (also, wenn ich mit dem Debugger da durchsteppe, führt er die return-Anweisung noch aus, und beim nächsten Schritt (wenn ich quasi nur noch &quot;}&quot; ausführe, also das Zurückspringen selbst, kommt die Fehlermeldung).<br />
Die Methode getVar() führe ich in einem Array von Pointern auf A aus, immer nur wenn ein Objekt von C drin ist, aber komischerweise werden einige der Anweisungen vorher korrekt ausgeführt. Bin da ziemlich ratlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215315/zugriffsverletzung-beim-rausspringen-aus-methode</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 12:14:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215315.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Jun 2008 13:09:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 13:09:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme eine Fehlermeldung, die ich mir absolut nicht erklären kann.</p>
<pre><code class="language-cpp">class A {
      	protected:
      	double  itsVar;

	public:
	double getVar();
}

class B : public A{
}

class C: public B{
}

double A::getVar() {
     return itsVar;
}
</code></pre>
<p>Ich bekomme dann beim rausspringen aus der Methode getVar() eine Zugriffsverletzung (also, wenn ich mit dem Debugger da durchsteppe, führt er die return-Anweisung noch aus, und beim nächsten Schritt (wenn ich quasi nur noch &quot;}&quot; ausführe, also das Zurückspringen selbst, kommt die Fehlermeldung).<br />
Die Methode getVar() führe ich in einem Array von Pointern auf A aus, immer nur wenn ein Objekt von C drin ist, aber komischerweise werden einige der Anweisungen vorher korrekt ausgeführt. Bin da ziemlich ratlos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525728</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Mon, 09 Jun 2008 13:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 13:15:20 GMT]]></title><description><![CDATA[<p>Der Fehler liegt im aufrufenden Code. Möglicherweise wird in dem besagten Array von A* ein nicht vorhandenes oder nicht initialisiertes Element angesprochen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525732</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525732</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 09 Jun 2008 13:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 14:50:36 GMT]]></title><description><![CDATA[<p>Doch, im Debugger sieht das Objekt ganz in Ordnung aus. Der Wert ist auch gesetzt...<br />
Was mir noch aufgefallen ist, daß ich noch eine Klassenvariable &quot;type&quot; habe in Klassen A und C (in A auf 1 gesetzt und in C auf 2) und dazu eine virtuelle Methode &quot;getType()&quot;. Wenn das Objekt in dem Array ein Pointer auf C ist, müßte bei getType() also 2 geliefert werden. Das passiert auch. Aber wenn ich mir dasselbe Objekt im Debugger ansehe (mit &quot;untersuchen&quot; im Borland Builder), steht bei &quot;type&quot; 1 drin. Das ist allerdings auch schon bei Objekten so, bei denen es zu keinem Fehler kommt.<br />
Also, das kommt mir merkwürdig vor, ich kann aber trotzdem keinen Zusammenhang zu der Fehlermeldung erkennen.</p>
<p>Also, wenn jemand noch eine Idee hat, wär echt super!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525783</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Mon, 09 Jun 2008 14:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:37:35 GMT]]></title><description><![CDATA[<p>Habs nochmal alles zusammen neu aufgeschrieben:</p>
<pre><code class="language-cpp">class A {
    protected:
    double  itsVar;
    static int type;

    public:
    double getVar();
    virtual int getType();
}

class B : public A{
}

class C: public B{
    protected:
    static int type;

    public:
    virtual int getType();
}
</code></pre>
<pre><code class="language-cpp">int A::type=1;
int C::type=2;

int A::getType() {
       return type;
}

int C::getType() {
       return type;
}

double A::getVar() {
     return itsVar;
}
</code></pre>
<p>Das Array dann schließlich, von dem aus aufgerufen wird:</p>
<pre><code class="language-cpp">A* Arr[xsize][ysize][3];

if ( (Arr[x][y][0]!=0) &amp;&amp; (Arr[x][y][0]-&gt;getType()==2) )
{             
    Arr[x][y][0]-&gt;getVar();
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1525792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525792</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:12:50 GMT]]></title><description><![CDATA[<p>Mir fallen bei diesem CodeAusschnitt ungefähr 7 potenzielle Fehlerquellen auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525794</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:12:50 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:23:57 GMT]]></title><description><![CDATA[<p>Wird Arr überhaupt initialisiert? Was bedeutet &quot;untersuchen&quot; im Debugger beim Borland Builder - interessiert der sich für den dynamischen Typ des Objektes?<br />
Nebenbei: Probleme, die der Debugger etwa bei der Überwachung von Variablen hat, sollten nur mit Vorsicht als Fehler qualifiziert werden. Es ist schließlich normal, dass zum Beipiel das Objekt hinter einem Nullzeiger oder einem Zeiger, der nicht initialisiert wurde, nicht überwacht werden kann - ohne dass diese Tatsache allein einen Programmfehler darstellt (ein Programmfehler liegt erst vor, wenn das Programm selbst den Objektzustand feststellen will).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525799</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:23:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:36:02 GMT]]></title><description><![CDATA[<p>@templäd:<br />
Welche denn?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>:<br />
Ja, Arr wird initialisiert, aber nicht in jedes Feld wird was reingeschrieben, weswegen ich ja bzgl. Gleichheit auf 0 teste.<br />
Tja, das mit dem dynamischen Typ ist beim Borland Builder so ein bißchen &quot;von hinten durch die Brust ins Auge&quot;, was den Typ selbst angeht. Ich dachte aber, daß da bei den Variablen schon die richtigen Werte drinstehen. Hm, von irgendwas muß ich aber doch ausgehen, dafür ist ein Debugger doch da?! Na ja, so oder so IST da ja ein Fehler...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525810</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:45:33 GMT]]></title><description><![CDATA[<p>susie schrieb:</p>
<blockquote>
<p>Ja, Arr wird initialisiert, aber nicht in jedes Feld wird was reingeschrieben</p>
</blockquote>
<p>Das ist irgendwie ein Widerspruch, oder nicht? Auch 0 ist <em>etwas</em> und steht da nicht (im Allgemeinen) von vornherein ohne das Zutun des Programmierers.</p>
<p>susie schrieb:</p>
<blockquote>
<p>Tja, das mit dem dynamischen Typ ist beim Borland Builder so ein bißchen &quot;von hinten durch die Brust ins Auge&quot;, was den Typ selbst angeht.</p>
</blockquote>
<p>Sehr metaphorisch. Sagt mir überhaupt nichts.<br />
Die Frage anders formuliert: Angenommen (du kannst das ja zu Testzwecken hinzufügen), Klasse C hat eine zusätzliche Membervariable, die nicht mit einer gleichnamigen Variable der Klasse A kollidiert. Erlaubt der Debugger dir dann, diese Membervariable in diesem Kontext (also über einen Zeiger des Typs A*) zu inspizieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525823</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:45:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 15:51:04 GMT]]></title><description><![CDATA[<p>Ok, ist die Frage, wie man &quot;initialisiert&quot; definiert. Aber wenn ich jedesmal auf 0 teste, sollte das doch egal sein?!</p>
<blockquote>
<p>Sehr metaphorisch. Sagt mir überhaupt nichts.</p>
</blockquote>
<p>Da hast Du recht <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="😉"
    /><br />
Erstmal das hier als Erklärung:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-214397-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-214397-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html</a><br />
Zu den Variablen schreibe ich später noch was...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525831</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Mon, 09 Jun 2008 15:51:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 16:05:27 GMT]]></title><description><![CDATA[<p>susie schrieb:</p>
<blockquote>
<p>Aber wenn ich jedesmal auf 0 teste, sollte das doch egal sein?!</p>
</blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>Auch 0 ist etwas und steht da nicht (im Allgemeinen) von vornherein [drin]</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Wenn <strong>Du</strong> vorher 0 reinschreibst. Wenn nicht, bringt Dein Vergleich auf 0 garnichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525840</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525840</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 09 Jun 2008 16:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Mon, 09 Jun 2008 16:06:09 GMT]]></title><description><![CDATA[<p>susie schrieb:</p>
<blockquote>
<p>Ok, ist die Frage, wie man &quot;initialisiert&quot; definiert.</p>
</blockquote>
<p>Initialisierung bedeutet, ein Objekt in einen definierten Anfangszustand zu versetzen. Die Initialisierung eines Arrays ist abgeschlossen, wenn alle seine Elemente initialisiert wurden. Ein Objekt, dass nicht initialisiert wurde, hat einen unbestimmten Zustand/Wert. Die Benutzung eines unbestimmten Wertes ist undefiniert. Insbesondere ist ein nicht initialiserter Zeiger kein Null-Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1525841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1525841</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 09 Jun 2008 16:06:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Tue, 10 Jun 2008 10:06:51 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>da hat sich mein Posting gestern abend mit camper überschnitten.</p>
<p>Ja, also mit 0 initialisiere ich es (oder weise eben einen Pointer auf ein Objekt zu), s. unten.</p>
<p>So, und zur Variablendarstellung im Debugger:<br />
Instanzvariablen der Klasse C (die nicht in A vorkommen) kann ich mir ansehen, wenn ich in einer Methode von C bin. Ansonsten nicht (das dürfte wohl auch das Problem gestern bei der Klassenvariable type gewesen sein). Von daher müßte die Fehlermeldung meiner Meinung nach dann wohl doch mit was anderem zu tun haben.</p>
<p>Hier also nochmal explizit der Code zur Initialisierung.<br />
Klasse C1 erbt auch von B, Klassen D und D1 erben von einer &quot;Schwesterklasse&quot; von B, nur der Vollständigkeit halber.</p>
<pre><code class="language-cpp">for (int x=0; x&lt;xsize; x++) {
         for (int y=0; y&lt;ysize; y++) {
             for (int z=0; z&lt;2; z++) {

                 zuf=rand()/(double) RAND_MAX;
                 if (zuf&lt;0.3) {
                    Arr[x][y][z]=new C(0.4,x,y,z);
                 } else if (zuf&lt;0.3+0.1) {
                    Arr[x][y][z]=new C1(0.4,x,y,z);
                 } else if (zuf&lt;0.3+0.1+0.2) {
                    Arr[x][y][z]=new D(0.4,x,y,z);
                 } else if (zuf&lt;0.3+0.1+0.2+0.2) {
                    Arr[x][y][z]=new D1(0.4,x,y,z);
                 } else {
                    Arr[x][y][z]=0; 
                 }
             }
             Arr[x][y][2]=0;
         }
     }

     for (int x=0; x&lt;xsize; x++) {
         for (int y=0; y&lt;ysize; y++) {
             if ((Arr[x][y][0]!=0) &amp;&amp; (Arr[x][y][1]!=0) &amp;&amp; (typeid(*(Arr[x][y][0]))==typeid(*(Arr[x][y][1])))) {
                Arr[x][y][0]-&gt;setVar(0.8);
                Arr[x][y][1]=0;
             }
         }
     }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1526243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1526243</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Tue, 10 Jun 2008 10:06:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Tue, 10 Jun 2008 13:48:29 GMT]]></title><description><![CDATA[<p>Hallo nochmal,</p>
<p>ich hoffe, es war nicht zu verwirrend, daß ich das mit dem Debugger geschrieben habe, war mir halt nur aufgefallen. Sonst fällt mir halt nur leider gar nichts auf und ich hab keine Idee, was es sein könnte. (an den Zugriffsrechten kanns auch nicht wirklich liegen, oder? Habs außerdem die Instanzvariablen mit public statt protected ausprobiert, das hat auch nichts geändert)<br />
Also, würd mich echt freuen, wenn jemand eine Idee hat.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1526415</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1526415</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Tue, 10 Jun 2008 13:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim rausspringen aus Methode on Tue, 10 Jun 2008 14:47:04 GMT]]></title><description><![CDATA[<p>Ich habs gefunden!!!! Yippiee!<br />
Problem war, daß ich den hier dargestellten Aufruf</p>
<pre><code class="language-cpp">Arr[x][y][0]-&gt;getVar()
</code></pre>
<p>in eine weitere Funktion gepackt habe, die den Wert wohl in ein Array schreibt. Dieses Array war nicht richtig dimensioniert. Und diese weitere Funktion hab ich deshalb hier nicht erwähnt, weil es ein sehr spezielles Plug-In für C++ ist, daß heir wohl niemand kennt. Grmpf, und ich selbst hab den Wald vor lauter Bäumen nicht gesehen bzw. hab den Fehler eher auf meine mangelnden C++ -Kenntnisse geschoben. Na ja, nu läuft's... <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/1526458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1526458</guid><dc:creator><![CDATA[susie]]></dc:creator><pubDate>Tue, 10 Jun 2008 14:47:04 GMT</pubDate></item></channel></rss>