<?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[Merkwürdiger Fehler mit Pointer-Arrays]]></title><description><![CDATA[<p>Hi,</p>
<p>weiß jemand, warum folgender Code nicht richtig funktioniert?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class TestClass {
public:
	TestClass** array;

	TestClass(TestClass** _array) : array(_array) {}
};

TestClass* test1 = 0;
TestClass* test2 = 0;

void init_test1() {
	TestClass* arr[] = { 0 };
	test1 = new TestClass(arr);
}

void init_test2() {
	init_test1();
	TestClass* arr[] = { 0, test1 };
	test2 = new TestClass(arr);
}

int main(int argc, char** argv) {
	init_test2();

	cout &lt;&lt; &quot;test2-&gt;array[1]: &quot; &lt;&lt; test2-&gt;array[1] &lt;&lt; endl;
	cout &lt;&lt; &quot;test2-&gt;array[1]: &quot; &lt;&lt; test2-&gt;array[1] &lt;&lt; endl;
	cout &lt;&lt; &quot;test1: &quot; &lt;&lt; test1 &lt;&lt; endl;

	delete test1;
	delete test2;
}
</code></pre>
<p>Die Ausgabe ist bei mir:</p>
<pre><code>test2-&gt;array[1] : 0x804a008
test2-&gt;array[1] : 0x8049c20
test1: 0x804a008
</code></pre>
<p>Eigentlich sollte der Pointer alle drei mal gleich bleiben, erst recht in den ersten beiden Zeilen.<br />
Valgrind gibt mir folgenden Fehler:</p>
<pre><code>==14731== Invalid read of size 4
==14731==    at 0x804880B: main (in /home/pumphaus/Documents/Programmierung/test4/test)
==14731==  Address 0xBED1ED20 is just below the stack ptr.  To suppress, use: --workaround-gcc296-bugs=yes
</code></pre>
<p>Allerdings benutze ich GCC 4.1 und nicht 2.9.6.</p>
<p>Woher kann dieser Fehler kommen? Ich bin langsam schon am verzweifeln.<br />
Danke im Voraus,<br />
Pumphaus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/187272/merkwürdiger-fehler-mit-pointer-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 15:06:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187272.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jul 2007 23:07:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Merkwürdiger Fehler mit Pointer-Arrays on Tue, 17 Jul 2007 23:07:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>weiß jemand, warum folgender Code nicht richtig funktioniert?</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class TestClass {
public:
	TestClass** array;

	TestClass(TestClass** _array) : array(_array) {}
};

TestClass* test1 = 0;
TestClass* test2 = 0;

void init_test1() {
	TestClass* arr[] = { 0 };
	test1 = new TestClass(arr);
}

void init_test2() {
	init_test1();
	TestClass* arr[] = { 0, test1 };
	test2 = new TestClass(arr);
}

int main(int argc, char** argv) {
	init_test2();

	cout &lt;&lt; &quot;test2-&gt;array[1]: &quot; &lt;&lt; test2-&gt;array[1] &lt;&lt; endl;
	cout &lt;&lt; &quot;test2-&gt;array[1]: &quot; &lt;&lt; test2-&gt;array[1] &lt;&lt; endl;
	cout &lt;&lt; &quot;test1: &quot; &lt;&lt; test1 &lt;&lt; endl;

	delete test1;
	delete test2;
}
</code></pre>
<p>Die Ausgabe ist bei mir:</p>
<pre><code>test2-&gt;array[1] : 0x804a008
test2-&gt;array[1] : 0x8049c20
test1: 0x804a008
</code></pre>
<p>Eigentlich sollte der Pointer alle drei mal gleich bleiben, erst recht in den ersten beiden Zeilen.<br />
Valgrind gibt mir folgenden Fehler:</p>
<pre><code>==14731== Invalid read of size 4
==14731==    at 0x804880B: main (in /home/pumphaus/Documents/Programmierung/test4/test)
==14731==  Address 0xBED1ED20 is just below the stack ptr.  To suppress, use: --workaround-gcc296-bugs=yes
</code></pre>
<p>Allerdings benutze ich GCC 4.1 und nicht 2.9.6.</p>
<p>Woher kann dieser Fehler kommen? Ich bin langsam schon am verzweifeln.<br />
Danke im Voraus,<br />
Pumphaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327478</guid><dc:creator><![CDATA[Pumphaus]]></dc:creator><pubDate>Tue, 17 Jul 2007 23:07:44 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiger Fehler mit Pointer-Arrays on Tue, 17 Jul 2007 23:45:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void init_test1() { 
    TestClass* arr[] = { 0 }; 
    test1 = new TestClass(arr); 
}
</code></pre>
<p>du kopierst nie. und arr wird am ende der funktion zerstört. du hast also massig zeiger auf massig speicher der nicht dir gehört. und das gibt: undefiniertes verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327483</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 17 Jul 2007 23:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to Merkwürdiger Fehler mit Pointer-Arrays on Wed, 18 Jul 2007 00:07:44 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>du kopierst nie. und arr wird am ende der funktion zerstört. du hast also massig zeiger auf massig speicher der nicht dir gehört. und das gibt: undefiniertes verhalten.</p>
</blockquote>
<p>Ah, ich wusste doch, dass es etwas so simples is... Wenn man Stunden lang auf den Code starrt, ohne Pause, fällt einem sowas einfach nicht ein... -.-<br />
Danke auf jeden Fall :). Weiß nicht, wie lang es gedauert hätte, bis ich von allein drauf gekommen wär.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1327487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1327487</guid><dc:creator><![CDATA[Pumphaus]]></dc:creator><pubDate>Wed, 18 Jul 2007 00:07:44 GMT</pubDate></item></channel></rss>