<?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 CTypedPtrList]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Problem mit einer Liste vom Typ CTypedPtrList, die Pointer auf Objekt speichert. Sie ist ein Member einer Klasse, deren Instanzen immer auf dem Heap erstellt werden. In den meisten Fällen funktioniert es korrekt, nur stoße ich nach einigen Berechnungsschritten immer wieder an der gleichen Stelle auf folgendes Problem:</p>
<p>An einer Stelle, an der die Liste eigentlich leer sein müsste, ist der Count der Elemente im dreistelligen Millionenbereich und der Tail Pointer gibt eine falsche Adresse an (kein NULL Pointer mehr).</p>
<p>Ich bin alle Einzelschritte im Debugmodus durchgegangen: Von der Erstellung der Instanz der Klasse bis zu dem Punkt, an dem der Fehler ausgegeben wird und habe dabei die Wert der Liste überwacht. Die Liste wird von meinem Code nicht verändert. Die Werte ändern sich ins Unsinnige an einem Punkt im Quellcode, an dem nichts anderes gemacht wird als Pointer auszulesen und einige Rechenoperationen (+-*/) durchgeführt werden.<br />
Es werden nur Daten an Adressen verändert, die schon existieren. Die new und delete Operatoren sind nicht im Spiel.<br />
Und wie gesagt, die Liste selber wird nicht berührt.</p>
<p>Was könnte so einen Fehler hervorrufen? Ich bin ratlos...</p>
<p>edit:<br />
Habe hier im Forum gelesen, dass eventuell der Speicher zerstört werden kann. Jetzt meine Fragen:<br />
Wie läuft das ab?<br />
Wann passiert das und<br />
wie vermeide ich das?<br />
Hat der Heap nur eine bestimmte Größe?<br />
Und wenn ja wie ändere ich die?<br />
Kann mein Heap voll sein?</p>
<p>Vielen Dank im Voraus.<br />
kyp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193159/problem-mit-ctypedptrlist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 09:08:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193159.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Sep 2007 06:17:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit CTypedPtrList on Sun, 23 Sep 2007 07:29:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Problem mit einer Liste vom Typ CTypedPtrList, die Pointer auf Objekt speichert. Sie ist ein Member einer Klasse, deren Instanzen immer auf dem Heap erstellt werden. In den meisten Fällen funktioniert es korrekt, nur stoße ich nach einigen Berechnungsschritten immer wieder an der gleichen Stelle auf folgendes Problem:</p>
<p>An einer Stelle, an der die Liste eigentlich leer sein müsste, ist der Count der Elemente im dreistelligen Millionenbereich und der Tail Pointer gibt eine falsche Adresse an (kein NULL Pointer mehr).</p>
<p>Ich bin alle Einzelschritte im Debugmodus durchgegangen: Von der Erstellung der Instanz der Klasse bis zu dem Punkt, an dem der Fehler ausgegeben wird und habe dabei die Wert der Liste überwacht. Die Liste wird von meinem Code nicht verändert. Die Werte ändern sich ins Unsinnige an einem Punkt im Quellcode, an dem nichts anderes gemacht wird als Pointer auszulesen und einige Rechenoperationen (+-*/) durchgeführt werden.<br />
Es werden nur Daten an Adressen verändert, die schon existieren. Die new und delete Operatoren sind nicht im Spiel.<br />
Und wie gesagt, die Liste selber wird nicht berührt.</p>
<p>Was könnte so einen Fehler hervorrufen? Ich bin ratlos...</p>
<p>edit:<br />
Habe hier im Forum gelesen, dass eventuell der Speicher zerstört werden kann. Jetzt meine Fragen:<br />
Wie läuft das ab?<br />
Wann passiert das und<br />
wie vermeide ich das?<br />
Hat der Heap nur eine bestimmte Größe?<br />
Und wenn ja wie ändere ich die?<br />
Kann mein Heap voll sein?</p>
<p>Vielen Dank im Voraus.<br />
kyp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370896</guid><dc:creator><![CDATA[kyp]]></dc:creator><pubDate>Sun, 23 Sep 2007 07:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit CTypedPtrList on Sun, 23 Sep 2007 07:19:50 GMT]]></title><description><![CDATA[<p>du musst wohl bischen code zeigen wo das problem auftritt, so ist das schwer nachzuvollziehen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1370910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370910</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Sun, 23 Sep 2007 07:19:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit CTypedPtrList on Sun, 23 Sep 2007 08:48:06 GMT]]></title><description><![CDATA[<p>Das Problem ist welchen Abschnitt im Code?</p>
<pre><code class="language-cpp">double	Point::SET_POINT_PRIORITY(double distance, double velocity, Point* prev_point)
{
	if(!prev_point)
	{
		point_priority = distance/velocity;
	}
	else
	{
		point_priority = prev_point-&gt;GET_POINT_PRIORITY() //gibt double zurück
              + distance/velocity; //&lt;- wenn das ausgeführt wird 
                                   //ändern sich die Werte eines völlig anderen 
                                   //Objekts! Daher kann ich nicht viel Code zeigen :(
	}
	return point_priority;
}
</code></pre>
<p>Aber es kommt auch ganz auf die Eingaben an, habe ich festgestellt. Manchmal bricht er bei A ab und dann wieder bei B. Dabei sind es bei gleichen Eingaben immer die gleichen Stellen.<br />
Manchmal kommt die Meldung:<br />
&quot;Windows hat einen Haltepunkt ausgelöse...&quot; &quot;Es könnte auf eine beschädigung des Heaps zurückzuführen sein&quot;</p>
<p>und diese Funktion (hab ich eben im Forum gefunden) spricht auch an:</p>
<pre><code class="language-cpp">ASSERT(AfxCheckMemory());
</code></pre>
<p>Ich habe meinen ersten Beitrag editiert und glaube es liegt am Heap. Nur kenne ich mich da so gar nicht aus. Kannst du die Fragen beantworten?<br />
Vielen Dank schonmal<br />
Kyp</p>
<p>PS:<br />
Klassendeklaration in der die Liste liegt:</p>
<pre><code class="language-cpp">class Flow_Field :
	public CObject
{
public:
	Flow_Field(void);
public:
	~Flow_Field(void);

	void	SET_FF_COORDINATES(void);			//calculates the points' xpositions in this ff
	void	SET_FF_POINT_PRIORITIES(double kappa);		//calculates the points' priority
	void	SORT_POINTS_LIST(void);				//sorts the points according to the points' xpositions in this ff
	double	CALC_AVG_VELOCITY(double kappa);
	void	SET_FF_DATA(double ma, double fl_ang, double pres, double temp, double dens, int number);
	void	SET_FF_PROPERTIES(bool mirror, double open_ang, double clos_ang);
	void	SET_FF_POINTERS(Point* pPOO, Line* pOPL, Line* pCLL);

	void	SEARCH_FOR_POINTS_IN_FLOW_FIELD(Time_Step* pTime_Step);
	void	GIVE_FF_POINTLIST_TO_TS_POINTLIST(CTypedPtrList&lt;CObList, Point*&gt;* pPoint_List);

	double	mach;
	double  flow_angle;
	double	pressure;
	double	temperature;
	double	density;
	//double	kappa;
	double  opening_angle;		
	double	closing_angle;		
	double	avg_velocity;
	bool	first_flow_field;
	bool	mirrored;			//if the flowfield induces a mirrored calculation
	int		flow_field_number;

	CTypedPtrList&lt;CObList, Point*&gt;			point_list; //UM DIESE LISTE GEHT ES
	CTypedPtrList&lt;CObList, Line*&gt;			line_list;

	Line*	pOpening_Line;
	Line*	pClosing_Line;
	Point*	pPoint_of_Origin;
	Time_Step* pTS;

};
</code></pre>
<p>edit:</p>
<p>hier ein paar Fehlermeldungen von VS 2005:</p>
<blockquote>
<p>HEAP CORRUPTION DETECTED: before Client block (#-1635531842) at 0x01748610.<br />
CRT detected that the application wrote to memory before start of heap buffer.<br />
Client located at 0x01748610 is 112 bytes long.<br />
Eine Ausnahme (erste Chance) bei 0x00683fe8 in Sonicwaves.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xf8839149.<br />
Unbehandelte Ausnahme bei 0x00683fe8 in Sonicwaves.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xf8839149.</p>
</blockquote>
<p>und</p>
<blockquote>
<p>HEAP[Sonicwaves.exe]: Dedicated (0006) free list element 0174B4F0 is wrong size (055f)<br />
Windows hat einen Haltepunkt in Sonicwaves.exe ausgelöst.</p>
<p>Dies kann auf eine Beschädigung des Heaps zurückzuführen sein und weist auf ein Problem in Sonicwaves.exe oder in einer der geladenen DLLs hin.</p>
<p>Weitere Analyseinformationen finden Sie möglicherweise im Ausgabefenster.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1370914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1370914</guid><dc:creator><![CDATA[kyp]]></dc:creator><pubDate>Sun, 23 Sep 2007 08:48:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit CTypedPtrList on Mon, 24 Sep 2007 14:01:10 GMT]]></title><description><![CDATA[<p>Entweder der this pointer oder prev_point ist ungültig!<br />
Du hast wilde Zeiger in Deinem Programm die dann den Heap zerstören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371652</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 24 Sep 2007 14:01:10 GMT</pubDate></item></channel></rss>