<?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[Speicher auf dem Heap kann nicht freigegeben werden?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche gerade ein kleines Tetris zu programmieren und benutze für die Steine, die im Feld liegen eine Liste. Nun möchte ich natürlich auch Steine (wenn z.B. eine Reihe voll ist) oder im im Destruktor die restlichen Listeneinträge löschen. In meinem Buch wird nicht besonders auf Zeiger eingegangen. Das einzige was da steht ist, dass man reservierten Speicher mit delete wieder freigeben kann. Also habe ich folgenden Code geschreiben:</p>
<pre><code class="language-cpp">void SteinListe::Delete(int x, int y) {
	Knoten* kn;
	Knoten* vor;

	kn = Head;

	while (TRUE) {
		if (kn-&gt;GetStein()-&gt;GetX() == x &amp;&amp;
			kn-&gt;GetStein()-&gt;GetY() == y) {
				if (kn == Head)
					Head = kn-&gt;GetNext();
				else if (kn == End) {
					End = vor;
					End-&gt;SetNext(NULL);
				}
				else
					vor-&gt;SetNext(kn-&gt;GetNext());

				Spielfeld-&gt;ChangeBlockStatus(kn-&gt;GetStein()-&gt;GetX(), kn-&gt;GetStein()-&gt;GetY(), 1);

				delete kn;

				break;
		}

		if (kn-&gt;HasNext()) {
			vor = kn;
			kn = kn-&gt;GetNext();
		}
		else
			break;
	}
}
</code></pre>
<p>So bekomme ich aber folgende Fehlermeldung vom Compiler:</p>
<blockquote>
<p>1&gt;SteinListe.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: __thiscall SteinListe::Knoten::~Knoten(void)&quot; (??1Knoten@SteinListe@@QAE@XZ)&quot; in Funktion &quot;&quot;public: void * __thiscall SteinListe::Knoten::`scalar deleting destructor'(unsigned int)&quot; (??_GKnoten@SteinListe@@QAEPAXI@Z)&quot;.</p>
</blockquote>
<p>Wenn ich das delete kn weglasse, funktionier alles, aber dann gibt es ja MemoryLeaks.</p>
<p>Wäre nett, wenn mir jemand dabei helfen könnte!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198740/speicher-auf-dem-heap-kann-nicht-freigegeben-werden</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 15:05:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198740.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Nov 2007 21:39:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher auf dem Heap kann nicht freigegeben werden? on Sat, 24 Nov 2007 21:39:38 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich versuche gerade ein kleines Tetris zu programmieren und benutze für die Steine, die im Feld liegen eine Liste. Nun möchte ich natürlich auch Steine (wenn z.B. eine Reihe voll ist) oder im im Destruktor die restlichen Listeneinträge löschen. In meinem Buch wird nicht besonders auf Zeiger eingegangen. Das einzige was da steht ist, dass man reservierten Speicher mit delete wieder freigeben kann. Also habe ich folgenden Code geschreiben:</p>
<pre><code class="language-cpp">void SteinListe::Delete(int x, int y) {
	Knoten* kn;
	Knoten* vor;

	kn = Head;

	while (TRUE) {
		if (kn-&gt;GetStein()-&gt;GetX() == x &amp;&amp;
			kn-&gt;GetStein()-&gt;GetY() == y) {
				if (kn == Head)
					Head = kn-&gt;GetNext();
				else if (kn == End) {
					End = vor;
					End-&gt;SetNext(NULL);
				}
				else
					vor-&gt;SetNext(kn-&gt;GetNext());

				Spielfeld-&gt;ChangeBlockStatus(kn-&gt;GetStein()-&gt;GetX(), kn-&gt;GetStein()-&gt;GetY(), 1);

				delete kn;

				break;
		}

		if (kn-&gt;HasNext()) {
			vor = kn;
			kn = kn-&gt;GetNext();
		}
		else
			break;
	}
}
</code></pre>
<p>So bekomme ich aber folgende Fehlermeldung vom Compiler:</p>
<blockquote>
<p>1&gt;SteinListe.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: __thiscall SteinListe::Knoten::~Knoten(void)&quot; (??1Knoten@SteinListe@@QAE@XZ)&quot; in Funktion &quot;&quot;public: void * __thiscall SteinListe::Knoten::`scalar deleting destructor'(unsigned int)&quot; (??_GKnoten@SteinListe@@QAEPAXI@Z)&quot;.</p>
</blockquote>
<p>Wenn ich das delete kn weglasse, funktionier alles, aber dann gibt es ja MemoryLeaks.</p>
<p>Wäre nett, wenn mir jemand dabei helfen könnte!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409577</guid><dc:creator><![CDATA[Glorb]]></dc:creator><pubDate>Sat, 24 Nov 2007 21:39:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher auf dem Heap kann nicht freigegeben werden? on Sat, 24 Nov 2007 22:10:11 GMT]]></title><description><![CDATA[<p>Lies!</p>
<p>Lies was da steht! 1. Es ist kein Compile-Fehler, sondern ein Linker-Fehler. 2. Jede Fehlermeldung kann man in der MSDN nachlesen. Einfach den Fehlercode (in dem Fall LNK2019) in den MSDN-Index oder -Suche eingeben, und es kommt eine super Beschreibung des Fehlers. 3. In der Fehlermeldung steht was falsch ist. Auch wenn es am Anfang kryptisch ist. Man muß sich überwinden und weiter lesen. <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 />
Will aber mal nicht so sein: du hast vergessen den Destruktor zu implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409586</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher auf dem Heap kann nicht freigegeben werden? on Sat, 24 Nov 2007 22:52:52 GMT]]></title><description><![CDATA[<p>Ok. Lektion gelernt! <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="😉"
    /></p>
<p>Jetzt läuft 's ... vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1409608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1409608</guid><dc:creator><![CDATA[Glorb]]></dc:creator><pubDate>Sat, 24 Nov 2007 22:52:52 GMT</pubDate></item></channel></rss>