<?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[Zeigerproblem mit delete...]]></title><description><![CDATA[<p>HalliHallo,</p>
<p>ein kleines Problem mit delete hat sich bei mir aufgetan und ich weiß nicht so recht woran das liegt. Erst mal der scr:</p>
<p>in DLL:</p>
<pre><code class="language-cpp">bool GL_Texture::GenMathTexture(unsigned int &amp;texture, GL_PIXEL_BUFFER*(*pTextureFunc)(), int quality)
{
	GL_PIXEL_BUFFER *pBitmap = NULL;
	pBitmap = pTextureFunc();

	[...]

	/*if(pBitmap)
	{
		if(pBitmap-&gt;data)
		{
			delete[] pBitmap-&gt;data;
		}
		delete pBitmap;
		pBitmap = NULL;
	}*/

	return true;
}
</code></pre>
<p>Bei dem Auskommentierten stürzt das Prg. ab (wenn es aktiv ist ^^) mit folgender Fehlermeldung:<br />
File: dbgdel.cpp<br />
Line: 52</p>
<p>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)</p>
<p>damit kann ich nicht wirklich was anfangen ^^</p>
<p>im Aufrufenden Programm:</p>
<pre><code class="language-cpp">GL_PIXEL_BUFFER *GenTexture()
{
	GL_PIXEL_BUFFER *pBitmap = new GL_PIXEL_BUFFER;

	pBitmap-&gt;sizeX = 512;
	pBitmap-&gt;sizeY = 512;
	pBitmap-&gt;type = GL_RGBA;
	pBitmap-&gt;data = new unsigned char[pBitmap-&gt;sizeX * pBitmap-&gt;sizeY * 4];

	[...]

	return pBitmap;
}

//

eng-&gt;GenMathTexture(textur1, GenTexture, 2);
</code></pre>
<p>Die Textur wird korrekt in OpenGL erzeugt und dargestellt, nur der Puffer wird will sich nicht löschen lassen.<br />
Kann man in DLL's keine Pointer mehr löschen die in der exe erstellt worden sind?</p>
<p>Thx für Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133474/zeigerproblem-mit-delete</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 01:14:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133474.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 18 Jan 2006 08:56:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Wed, 18 Jan 2006 08:56:09 GMT]]></title><description><![CDATA[<p>HalliHallo,</p>
<p>ein kleines Problem mit delete hat sich bei mir aufgetan und ich weiß nicht so recht woran das liegt. Erst mal der scr:</p>
<p>in DLL:</p>
<pre><code class="language-cpp">bool GL_Texture::GenMathTexture(unsigned int &amp;texture, GL_PIXEL_BUFFER*(*pTextureFunc)(), int quality)
{
	GL_PIXEL_BUFFER *pBitmap = NULL;
	pBitmap = pTextureFunc();

	[...]

	/*if(pBitmap)
	{
		if(pBitmap-&gt;data)
		{
			delete[] pBitmap-&gt;data;
		}
		delete pBitmap;
		pBitmap = NULL;
	}*/

	return true;
}
</code></pre>
<p>Bei dem Auskommentierten stürzt das Prg. ab (wenn es aktiv ist ^^) mit folgender Fehlermeldung:<br />
File: dbgdel.cpp<br />
Line: 52</p>
<p>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)</p>
<p>damit kann ich nicht wirklich was anfangen ^^</p>
<p>im Aufrufenden Programm:</p>
<pre><code class="language-cpp">GL_PIXEL_BUFFER *GenTexture()
{
	GL_PIXEL_BUFFER *pBitmap = new GL_PIXEL_BUFFER;

	pBitmap-&gt;sizeX = 512;
	pBitmap-&gt;sizeY = 512;
	pBitmap-&gt;type = GL_RGBA;
	pBitmap-&gt;data = new unsigned char[pBitmap-&gt;sizeX * pBitmap-&gt;sizeY * 4];

	[...]

	return pBitmap;
}

//

eng-&gt;GenMathTexture(textur1, GenTexture, 2);
</code></pre>
<p>Die Textur wird korrekt in OpenGL erzeugt und dargestellt, nur der Puffer wird will sich nicht löschen lassen.<br />
Kann man in DLL's keine Pointer mehr löschen die in der exe erstellt worden sind?</p>
<p>Thx für Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969497</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Wed, 18 Jan 2006 08:56:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Wed, 18 Jan 2006 10:18:11 GMT]]></title><description><![CDATA[<p>Warum setzt du das &quot;delete[] data;&quot; nicht in den Destruktor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969561</guid><dc:creator><![CDATA[Evolver]]></dc:creator><pubDate>Wed, 18 Jan 2006 10:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Wed, 18 Jan 2006 10:25:55 GMT]]></title><description><![CDATA[<p>Da die Klasse erst beim beenden des Prg. zerstört wird und die GenTexture-Funktion mehrmals aufgerufen werden kann im Programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969572</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Wed, 18 Jan 2006 10:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Wed, 18 Jan 2006 20:29:02 GMT]]></title><description><![CDATA[<p>Hat keiner eine mögliche Lösung?</p>
<p>Die Klasse steht in abhängigkeit zu anderen Klassen und deshalb kann ich es dort nicht im Dekonstruktor löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/970069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970069</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Wed, 18 Jan 2006 20:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Wed, 18 Jan 2006 20:41:51 GMT]]></title><description><![CDATA[<p>Stürzt das Programm zur Laufzeit ab? Weil die Fehlermeldung sieht mir nach einem Compilerfehler aus, oder verwechsel ich da was?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/970078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970078</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 18 Jan 2006 20:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Thu, 19 Jan 2006 07:24:49 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>oder verwechsel ich da was?</p>
</blockquote>
<p>Sieht eher nach einem angeschlagenen ASSERT aus - normalerweise hast du dort die Auswahl zwischen Abbrechen (beendet das Programm), Wiederholen (startet den Debugger) und Ignorieren (setzt das Programm fort) - wähl mal das zweite und prüf' im Debugger, ob dort alle Werte richtig gesetzt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/970239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970239</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 19 Jan 2006 07:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Thu, 19 Jan 2006 13:14:47 GMT]]></title><description><![CDATA[<p>Jap, das Prg. stürzt zur Laufzeit ab und ist ein ASSERT so wie es ausschaut.</p>
<p>Hab von den 3 Möglichkeiten schon alle 3 durchprobiert. nur alles was ich sehe sind die variablen von der &quot;dbgdel.cpp&quot;. Und die sind irgendwie nicht aussagefähig im zusammenhang.</p>
<p>Die Adressen der pointer stimmen nach wie vor, nur wenn das delete aufgerufen wird -&gt; bumm... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/970533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970533</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Thu, 19 Jan 2006 13:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Thu, 19 Jan 2006 13:25:55 GMT]]></title><description><![CDATA[<p>Geh mal den Call-Stack etwas nach oben im Debugger, bis du zu deinen eigenen Funktionen gelangst - womöglich versuchst du ja, den selben Bereich doppelt wieder freizugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/970541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970541</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Thu, 19 Jan 2006 13:25:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Thu, 19 Jan 2006 15:30:23 GMT]]></title><description><![CDATA[<p>So, hab mir jetzt den stack mal angeschaut. Dort steht folgendes:</p>
<pre><code>&gt;	Engine.dll!_free_dbg_lk(void * pUserData=0x01cb0040, int nBlockUse=1)  Line 1200 + 0x2a	C
 	Engine.dll!_free_dbg(void * pUserData=0x01cb0040, int nBlockUse=1)  Line 1070 + 0xd	C
 	Engine.dll!operator delete(void * pUserData=0x01cb0040)  Line 54 + 0x10	C++
 	Engine.dll!operator delete[](void * p=0x01cb0040)  Line 21 + 0x9	C++
 	Engine.dll!GL_Texture::GenerateTexture(unsigned int &amp; texture=2, GL_PIXEL_BUFFER * (void)* pTextureFunc=0x00411668, int quality=2)  Line 211 + 0x17	C++
 	TestApp2.exe!WinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, char * lpCmdLine=0x00141f18, int iCmdShow=1)  Line 39 + 0x26	C++
 	TestApp2.exe!WinMainCRTStartup()  Line 251 + 0x30	C
 	kernel32.dll!7c816d4f() 	
 	ntdll.dll!7c925b4f() 	
 	kernel32.dll!7c8399f3()
</code></pre>
<p>Die 2 Funktionen sind nach wie vor unverändert wie oben.<br />
In der 'GenTexture'-Funktion lege ich den Speicher mit new an, und nur in der Klassenfunktion 'GenMathTexture' will ich ihn löschen und wird auch nur dort gemacht! Nur dort gibt es ein delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/970662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/970662</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Thu, 19 Jan 2006 15:30:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Fri, 20 Jan 2006 13:28:17 GMT]]></title><description><![CDATA[<p>Kann es sein, das du in pTextureFunc() das speicher mit sowas wie &quot;new char[...];&quot; anlegst?</p>
<p>Dieses Fehlermeldung tritt nähmlich meistens dann auf, wenn ein block mit einen Type (zB char) angelegt wurde, aber mit einen anderen freigemacht wird (in deinem fall - GL_PIXEL_BUFFER). Wenn es so ist, solltest du es so machen: &quot;delete[] (char*) pBitmap-&gt;data;&quot;</p>
<p>---------------<br />
Uups, ich habe hier blödsinn geschrieben..... Aber der sinn ist richtig - bist du sicher das der pointer das richtige Type hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/971361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/971361</guid><dc:creator><![CDATA[Maverick89]]></dc:creator><pubDate>Fri, 20 Jan 2006 13:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zeigerproblem mit delete... on Fri, 20 Jan 2006 17:00:40 GMT]]></title><description><![CDATA[<p>Stimmt, data ist eine new unsigned char[...].</p>
<p>Hier nochmal was mit new angelegt wird und wie es gelöscht wird:</p>
<pre><code class="language-cpp">struct GL_PIXEL_BUFFER
{
	unsigned char *data;
	int sizeX;
	int sizeY;
	GLenum type;
};

//Ein neues Objekt von GL_PIXEL_BUFFER in der pTextureFunc()
GL_PIXEL_BUFFER *pBuf = new GL_PIXEL_BUFFER;
//sowie der data-puffer
pBuf-&gt;data = new unsigned char[pBuf-&gt;sizeX * pBuf-&gt;sizeY * 4];

//und jetzt das löschen in der Klassenfunktion:
if(pBitmap)
	{
		if(pBitmap-&gt;data)
		{
			delete[] pBitmap-&gt;data;
		}
		delete pBitmap;
		pBitmap = NULL;
	}
</code></pre>
<p>Müßte doch theoretisch so funktionieren??? Oder hab ich hier tatsächlich was übersehen? Denn er mault ja schon bei delete pBitmap rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/971574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/971574</guid><dc:creator><![CDATA[VirtualDreams]]></dc:creator><pubDate>Fri, 20 Jan 2006 17:00:40 GMT</pubDate></item></channel></rss>