<?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[Problem mit Dekonstruktor(anscheinend)]]></title><description><![CDATA[<p>Hiho, ich übe gerade ein wenig das Arbeiten mit Klassen, und versuche eine Vektorklasse zu erstellen.<br />
Ich arbeite gerade an der Operatorenüberladung, stoße aber auf ein Problem, hier erstmal die wichtigen Teile des Codes:</p>
<pre><code>typedef short dim;

class Vektor 
{

public:
	Vektor(int a = 3);
	~Vektor();
	double Betrag(void);
	void Norm(void);
	void Eingabe(void);
	void Ausgabe(void);
	double GibXn(int Xn);
	Vektor operator *(double t);
	void operator =(Vektor &amp;b);
private:
	dim i;
	double *v;

};
</code></pre>
<p>Hier der Konstruktor:</p>
<pre><code>Vektor::Vektor(int a)
:i(a), v(NULL)
{
	v = new double[i];
	for(int c = 0;c &lt; i;c++)
		v[c] = 0.0;
}
</code></pre>
<p>Hier der Dekonstruktor:</p>
<pre><code>Vektor::~Vektor()
{
	delete v;
	i = 0;
}
</code></pre>
<p>Und die Überladung der Operatoren:</p>
<pre><code>Vektor Vektor::operator * (double t)
{

	Vektor temp(this -&gt; i); 

	for(int c = 0;c &lt; i;c++)
	{
		temp.v[c] = (this -&gt; v[c]) * t;
	}
	printf(&quot;test&quot;);
	return temp;
}

void Vektor::operator =(Vektor &amp;b)
{

	if(( b.i) != (this -&gt; i))
	{ 
		printf(&quot;Dimensionen passen nicht zueinander\n&quot;);
		getchar();
		exit(1);
	}

	for(int c = 0;c &lt; i;c++)
	{
		this -&gt; v[c] = b.v[c];
	}
}
</code></pre>
<p>Ein Fehler tritt scheinbar bei der Deallokation der Zeiger von den beiden lokalen Objekten &quot;b&quot; und &quot;temp&quot; auf. Zumindest verweist mich Visual C++ 2005 immer darauf.<br />
Aber eigentlich wird doch alles wesentliche ordentlich behandelt, der Speicher sollte ja korrekt freigegeben werden.</p>
<p>Vielen Dank für eure Hilfe <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/topic/210923/problem-mit-dekonstruktor-anscheinend</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 18:40:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/210923.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 16 Apr 2008 17:38:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 17:38:38 GMT]]></title><description><![CDATA[<p>Hiho, ich übe gerade ein wenig das Arbeiten mit Klassen, und versuche eine Vektorklasse zu erstellen.<br />
Ich arbeite gerade an der Operatorenüberladung, stoße aber auf ein Problem, hier erstmal die wichtigen Teile des Codes:</p>
<pre><code>typedef short dim;

class Vektor 
{

public:
	Vektor(int a = 3);
	~Vektor();
	double Betrag(void);
	void Norm(void);
	void Eingabe(void);
	void Ausgabe(void);
	double GibXn(int Xn);
	Vektor operator *(double t);
	void operator =(Vektor &amp;b);
private:
	dim i;
	double *v;

};
</code></pre>
<p>Hier der Konstruktor:</p>
<pre><code>Vektor::Vektor(int a)
:i(a), v(NULL)
{
	v = new double[i];
	for(int c = 0;c &lt; i;c++)
		v[c] = 0.0;
}
</code></pre>
<p>Hier der Dekonstruktor:</p>
<pre><code>Vektor::~Vektor()
{
	delete v;
	i = 0;
}
</code></pre>
<p>Und die Überladung der Operatoren:</p>
<pre><code>Vektor Vektor::operator * (double t)
{

	Vektor temp(this -&gt; i); 

	for(int c = 0;c &lt; i;c++)
	{
		temp.v[c] = (this -&gt; v[c]) * t;
	}
	printf(&quot;test&quot;);
	return temp;
}

void Vektor::operator =(Vektor &amp;b)
{

	if(( b.i) != (this -&gt; i))
	{ 
		printf(&quot;Dimensionen passen nicht zueinander\n&quot;);
		getchar();
		exit(1);
	}

	for(int c = 0;c &lt; i;c++)
	{
		this -&gt; v[c] = b.v[c];
	}
}
</code></pre>
<p>Ein Fehler tritt scheinbar bei der Deallokation der Zeiger von den beiden lokalen Objekten &quot;b&quot; und &quot;temp&quot; auf. Zumindest verweist mich Visual C++ 2005 immer darauf.<br />
Aber eigentlich wird doch alles wesentliche ordentlich behandelt, der Speicher sollte ja korrekt freigegeben werden.</p>
<p>Vielen Dank für eure Hilfe <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/1493156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493156</guid><dc:creator><![CDATA[Kingcools2]]></dc:creator><pubDate>Wed, 16 Apr 2008 17:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 18:12:05 GMT]]></title><description><![CDATA[<p>Wenn du per new ein Array orderst, dann musst du das mit dem delete [] Operator zerstören.</p>
<p>Also:</p>
<pre><code class="language-cpp">Vektor::~Vektor()
{
    delete[] v;
    i = 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1493173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493173</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 16 Apr 2008 18:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 18:54:56 GMT]]></title><description><![CDATA[<p>Der Copy-ctor fehlt ebenso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493195</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 16 Apr 2008 18:54:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 19:07:15 GMT]]></title><description><![CDATA[<p>schon mal danke für eure antworten <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="🙂"
    /> ^^<br />
Mir ist bewusst dass der copy konstruktor fehlt, aber den MUSS man ja nicht zwingend haben, oder ?<br />
leider hab ich immernoch die selbe &quot;Fehlermeldung&quot; nachdem ich drakons Berichtigung ausgeführt hab ;/<br />
weiter hilfe ist willkommen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493202</guid><dc:creator><![CDATA[Kingcools2]]></dc:creator><pubDate>Wed, 16 Apr 2008 19:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 19:18:51 GMT]]></title><description><![CDATA[<p>Doch in deinem Fall brauchst du den eben Wahrscheinlich. Das klingt nämlich so, als ob du eine Speicherstelle 2 mal freigibst.</p>
<p>Also den Zeiger nach dem deleten sowieso auf 0 setzen und copy-ctor rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493208</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 16 Apr 2008 19:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 19:22:36 GMT]]></title><description><![CDATA[<p>Achso, ok vielen dank, dann probiere ich das jetzt mal ^^ Wenns geklappt hat schreib ich nicht mehr, ansonsten meld ich mich nochmal <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/1493210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493210</guid><dc:creator><![CDATA[Kingcools2]]></dc:creator><pubDate>Wed, 16 Apr 2008 19:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Wed, 16 Apr 2008 23:24:52 GMT]]></title><description><![CDATA[<p>Ok, nach einigen Stunden probieren, komme ich immernoch nicht auf einen grünen Zweig. Das problem ist mir mittlerweile klar(prinzipiell), aber ich weiß nicht, warum es auftaucht.<br />
Hier mein aktueller Code(in Teilen):</p>
<p>Konstruktoren und Destruktor:</p>
<pre><code>Vektor::Vektor(int a)
:i(a), v(NULL)
{

	v = new double[i];
	//v = (double *) malloc(sizeof(double)*i);
	for(int c = 0;c &lt; i;c++)
		v[c] = 0.0;
}

Vektor::~Vektor()
{
	if(v != NULL)
	delete[] v; // Diese Zeile missfällt dem Compilerr, was wohl wir ihre //gesagt habt, an der falschen Kopierung der Objekte liegt(zeiger also auf die     
// selbe Adresse zeigen)
	v = NULL;
	i = 0;
}

Vektor::Vektor(const Vektor &amp;Vek)//Hier muss ich irgendetwas ändern ;/
{
	i = Vek.i;
	v = new double[i];
	for(int c = 0;c &lt; i;i++)
		v[c] = Vek.v[c];
}
</code></pre>
<pre><code>typedef short dim;

class Vektor 
{

public:
	Vektor(int a = 3);
	~Vektor();
	Vektor(const Vektor &amp;Vek); 
	double Betrag(void);
	void Norm(void);
	void Eingabe(void);
	void Ausgabe(void);
	double GibXn(int Xn);
	Vektor operator *(double t);
	//Vektor &amp;operator= (const Vektor &amp;b);
private:
	dim i;
	double *v;

};
</code></pre>
<p>Ist im wesentlichen identisch mit dem oberen Post.<br />
Was muss ich nun genau am Copykonstruktor ändern ? Das ich bei dynamischer Speicherverwaltung das Kopieren selber übernehmen muss, ist mir mittlerweile klar, aber ganz offensichtlich ist meine version ja auch noch falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493291</guid><dc:creator><![CDATA[Kingcools2]]></dc:creator><pubDate>Wed, 16 Apr 2008 23:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Thu, 17 Apr 2008 05:14:30 GMT]]></title><description><![CDATA[<p>Jetzt fehlt der operator= <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>
<p>BTW: Bitte sag nicht &quot;diese Zeile missfällt dem Compiler&quot;, wenn das Programm beim Ablauf abstürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493303</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 17 Apr 2008 05:14:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Thu, 17 Apr 2008 08:28:40 GMT]]></title><description><![CDATA[<p>Noch mal was zum Lesen für Kingcools2.<br />
<a href="http://tutorial.schornboeck.net/bigthree.htm" rel="nofollow">http://tutorial.schornboeck.net/bigthree.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493357</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 17 Apr 2008 08:28:40 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Dekonstruktor(anscheinend) on Thu, 17 Apr 2008 08:36:04 GMT]]></title><description><![CDATA[<p>Ok, danke Braunstein und jaaa lord hast ja recht ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1493362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1493362</guid><dc:creator><![CDATA[Kingcools2]]></dc:creator><pubDate>Thu, 17 Apr 2008 08:36:04 GMT</pubDate></item></channel></rss>