<?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[externes Array in Klasse verwenden]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte eine Array an eine Klasse übergeben (z.B. ein Eingangspuffer) und<br />
unter Verwendung von Methoden am originalen Array Anderungen vornehmen. Dies funktioniert auch, solange das Objekt existiert. Wird der Destruktor aufgerufen, so ist der Zugriff auf das externes Array nicht mehr möglich. Wo ist der Denkfehler? Sollte nicht nur der Zeiger auf den Zeiger auf Int (int **data) freigegeben werden.</p>
<p>Danke!</p>
<pre><code class="language-cpp">class TheClass
{
	public:
		TheClass(int size, int **data);
		~TheClass(void);

		int get_value(int position);
		void set_value(int position, int value);

	private:
		int **data;
		int size;
};

TheClass::TheClass(int size, int **data_array){
	data = data_array;
	this-&gt;size = size;
}

TheClass::~TheClass(void){
}

int TheClass::get_value(int position){
	return *data[position];
}

void TheClass::set_value(int position, int value){
	*data[position] = value;
}

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

	int *data;
	data = new int[10];
	data[0] = 55;
	cout &lt;&lt; data[0] &lt;&lt; endl;

	TheClass test(10, &amp;data);

	test.set_value(0, 99);
	cout &lt;&lt; test.get_value(0) &lt;&lt; endl;

	delete &amp;test;

	cout &lt;&lt; data[0] &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/280286/externes-array-in-klasse-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 04:04:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280286.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 13 Jan 2011 00:59:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to externes Array in Klasse verwenden on Thu, 13 Jan 2011 00:59:36 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte eine Array an eine Klasse übergeben (z.B. ein Eingangspuffer) und<br />
unter Verwendung von Methoden am originalen Array Anderungen vornehmen. Dies funktioniert auch, solange das Objekt existiert. Wird der Destruktor aufgerufen, so ist der Zugriff auf das externes Array nicht mehr möglich. Wo ist der Denkfehler? Sollte nicht nur der Zeiger auf den Zeiger auf Int (int **data) freigegeben werden.</p>
<p>Danke!</p>
<pre><code class="language-cpp">class TheClass
{
	public:
		TheClass(int size, int **data);
		~TheClass(void);

		int get_value(int position);
		void set_value(int position, int value);

	private:
		int **data;
		int size;
};

TheClass::TheClass(int size, int **data_array){
	data = data_array;
	this-&gt;size = size;
}

TheClass::~TheClass(void){
}

int TheClass::get_value(int position){
	return *data[position];
}

void TheClass::set_value(int position, int value){
	*data[position] = value;
}

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

	int *data;
	data = new int[10];
	data[0] = 55;
	cout &lt;&lt; data[0] &lt;&lt; endl;

	TheClass test(10, &amp;data);

	test.set_value(0, 99);
	cout &lt;&lt; test.get_value(0) &lt;&lt; endl;

	delete &amp;test;

	cout &lt;&lt; data[0] &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2005923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005923</guid><dc:creator><![CDATA[gruuu]]></dc:creator><pubDate>Thu, 13 Jan 2011 00:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to externes Array in Klasse verwenden on Thu, 13 Jan 2011 01:51:08 GMT]]></title><description><![CDATA[<p>Du sollst nicht Objekte mit delete freigeben, die nicht mit new angelegt wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005927</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 13 Jan 2011 01:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to externes Array in Klasse verwenden on Thu, 13 Jan 2011 07:26:20 GMT]]></title><description><![CDATA[<p>gruuu schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class TheClass
{
	public:
		TheClass(int size, int **data);
		~TheClass(void);

		int get_value(int position);
		void set_value(int position, int value);

	private:
		int **data;
		int size;
};
</code></pre>
</blockquote>
<p>Das mit dem Zeiger auf Zeiger ist irgendwie Quatsch hier.</p>
<blockquote>
<pre><code class="language-cpp">TheClass::TheClass(int size, int **data_array){
	data = data_array;
	this-&gt;size = size;
}

TheClass::~TheClass(void){
}
</code></pre>
</blockquote>
<p>Wenn Du hier nichts machst, kannst Du die Deklaration und die Definition des Destruktors weglassen.</p>
<blockquote>
<pre><code class="language-cpp">int TheClass::get_value(int position){
	return *data[position];
}

void TheClass::set_value(int position, int value){
	*data[position] = value;
}
</code></pre>
</blockquote>
<p>Hier zerschießt Du Dir den automatischen Speicherbereich. [] bindet stärker als *, deswegen ist *data[pos] äquivalent zu *(data[pos]) und nicht (*data)[pos}, was Du eigentlich hättest schreiben müssen.</p>
<blockquote>
<pre><code class="language-cpp">int main(int argc, char **argv) {

	int *data;
	data = new int[10];
	data[0] = 55;
	cout &lt;&lt; data[0] &lt;&lt; endl;

	TheClass test(10, &amp;data);

	test.set_value(0, 99);
	cout &lt;&lt; test.get_value(0) &lt;&lt; endl;

	delete &amp;test;

	cout &lt;&lt; data[0] &lt;&lt; endl;
}
</code></pre>
</blockquote>
<p>Dein delete ist falsch. Die Variable data wurde nicht per new angelegt. Das muss heißen &quot;delete[] data&quot;;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2005935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2005935</guid><dc:creator><![CDATA[akkes_falsch]]></dc:creator><pubDate>Thu, 13 Jan 2011 07:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to externes Array in Klasse verwenden on Fri, 14 Jan 2011 12:00:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Dein delete ist falsch. Die Variable data wurde nicht per new angelegt. Das muss heißen &quot;delete[] data&quot;;</p>
</blockquote>
<p>und das Ganze noch hinter das letzte <code>cout &lt;&lt; data[0]</code> ...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25308">@gruuu</a>: Drei Tips:</p>
<p>- Schreibe die Größe des Arrays nur ein einziges Mal und benutze dann diese Bezeichnung statt der &quot;Magic number&quot; 10, z.B.</p>
<pre><code class="language-cpp">#define ARRAY_SIZE 10
</code></pre>
<p>oder besser</p>
<pre><code class="language-cpp">const unsigned int ARRAY_SIZE = 10;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">enum { ARRAY_SIZE = 10 };
</code></pre>
<p>und dann</p>
<pre><code class="language-cpp">data = new int[ ARRAY_SIZE ];
</code></pre>
<p>- Deine Klasse weiß ja die Größe des Arrays. Daher solltest Du in <code>get_value( )</code> und <code>set_value( )</code> den Index gegen diese Größe vergleichen, damit Du kein Element außerhalb erwischst --&gt; tut weh.</p>
<p>- Schau Dir mal die Klasse <code>vector</code> aus der Standard-Bibliothek an, das ist eine Art Array, das seine Größe selbst weiß und man braucht keine Pointer-Pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2006505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2006505</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Fri, 14 Jan 2011 12:00:38 GMT</pubDate></item></channel></rss>