<?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[Speicherleck bei A* Implementierung, vermutlich im Heap]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade einen A* Algo zu implemetieren und habe mich weitestgehend an diesen Artikel gehalten: <a href="http://www.student.nada.kth.se/~f93-maj/pathfinder/4.html#2.6" rel="nofollow">http://www.student.nada.kth.se/~f93-maj/pathfinder/4.html#2.6</a></p>
<p>Der Autor nutzt als PriorityQueue einen Fibonacci Heap und verwendet folgende Implementierung:<br />
<a href="http://web.mit.edu/cocosci/isomap/code/fibheap.h" rel="nofollow">http://web.mit.edu/cocosci/isomap/code/fibheap.h</a><br />
<a href="http://web.mit.edu/cocosci/isomap/code/dijkstra.cpp" rel="nofollow">http://web.mit.edu/cocosci/isomap/code/dijkstra.cpp</a><br />
Die cpp ist im wesentlichen die fibheap.cpp - nur, dass unten noch ein Dijstra dranhängt, der hier aber uninteressant ist.</p>
<p>Ich habe mal versucht, das Problem auf das Wesentliche zu reduzieren und lasse den Großteil des A* einfach mal weg. Dazu habe ich mel eine Testfunktion gebaut, in der ich den Heap analog zum Verlauf des Suchalgos fülle und leere. Der dabei allozierte Speicher wird leider nicht wieder freigegeben und ich weiß momentan nicht weiter...</p>
<pre><code class="language-cpp">void test()
{
	FibHeap PQ;
	HeapNode* p;
	for (int i=0; i&lt;8000;i++)
	{
		for(int j=100;j&gt;0;j--)
		{
		p=new HeapNode;
		p-&gt;x=i;
		p-&gt;g=i*j;
		p-&gt;h=9999999/(j+1);
		PQ.Insert(p);	
		}
	}

	while((p = (HeapNode*)PQ.ExtractMin()) !=NULL)
	{
		//jeweils kleinsten Knoten vom Heap genommen

	}
	delete p;
}
</code></pre>
<p>HeapNode ist analog zur dijkstra.cpp eine von FibHeapNode abgeleitete Klasse, nur dass ich int x und float g,h als Member habe und die Operatoren entsprechend angpasst habe.</p>
<p>Ich hoffe, dass das Problem halbwegs deutlich wird und jemand eine Idee hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205706/speicherleck-bei-a-implementierung-vermutlich-im-heap</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 12:32:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205706.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Feb 2008 01:31:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck bei A* Implementierung, vermutlich im Heap on Sun, 17 Feb 2008 01:31:02 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche gerade einen A* Algo zu implemetieren und habe mich weitestgehend an diesen Artikel gehalten: <a href="http://www.student.nada.kth.se/~f93-maj/pathfinder/4.html#2.6" rel="nofollow">http://www.student.nada.kth.se/~f93-maj/pathfinder/4.html#2.6</a></p>
<p>Der Autor nutzt als PriorityQueue einen Fibonacci Heap und verwendet folgende Implementierung:<br />
<a href="http://web.mit.edu/cocosci/isomap/code/fibheap.h" rel="nofollow">http://web.mit.edu/cocosci/isomap/code/fibheap.h</a><br />
<a href="http://web.mit.edu/cocosci/isomap/code/dijkstra.cpp" rel="nofollow">http://web.mit.edu/cocosci/isomap/code/dijkstra.cpp</a><br />
Die cpp ist im wesentlichen die fibheap.cpp - nur, dass unten noch ein Dijstra dranhängt, der hier aber uninteressant ist.</p>
<p>Ich habe mal versucht, das Problem auf das Wesentliche zu reduzieren und lasse den Großteil des A* einfach mal weg. Dazu habe ich mel eine Testfunktion gebaut, in der ich den Heap analog zum Verlauf des Suchalgos fülle und leere. Der dabei allozierte Speicher wird leider nicht wieder freigegeben und ich weiß momentan nicht weiter...</p>
<pre><code class="language-cpp">void test()
{
	FibHeap PQ;
	HeapNode* p;
	for (int i=0; i&lt;8000;i++)
	{
		for(int j=100;j&gt;0;j--)
		{
		p=new HeapNode;
		p-&gt;x=i;
		p-&gt;g=i*j;
		p-&gt;h=9999999/(j+1);
		PQ.Insert(p);	
		}
	}

	while((p = (HeapNode*)PQ.ExtractMin()) !=NULL)
	{
		//jeweils kleinsten Knoten vom Heap genommen

	}
	delete p;
}
</code></pre>
<p>HeapNode ist analog zur dijkstra.cpp eine von FibHeapNode abgeleitete Klasse, nur dass ich int x und float g,h als Member habe und die Operatoren entsprechend angpasst habe.</p>
<p>Ich hoffe, dass das Problem halbwegs deutlich wird und jemand eine Idee hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457337</guid><dc:creator><![CDATA[Salix]]></dc:creator><pubDate>Sun, 17 Feb 2008 01:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei A* Implementierung, vermutlich im Heap on Sun, 17 Feb 2008 02:15:14 GMT]]></title><description><![CDATA[<p>Du rufst 800000 Mal new auf, aber nur ein einziges Mal delete. Das delete musst du fuer jeden HeapNode einzeln aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457340</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Sun, 17 Feb 2008 02:15:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei A* Implementierung, vermutlich im Heap on Sun, 17 Feb 2008 20:28:08 GMT]]></title><description><![CDATA[<p>besten Dank! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>nachdem ich deinen Hinweis heute Mittag gelesen habe, habe ich mir meinen geposteten Code nochmal genau angeguckt und mit dem eigentlichen Algorithmus verglichen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> - und siehe da, es war wirklich identisch und ein kleines delete in der Schleife hat es gebracht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457816</guid><dc:creator><![CDATA[Salix]]></dc:creator><pubDate>Sun, 17 Feb 2008 20:28:08 GMT</pubDate></item></channel></rss>