<?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[Debug Assertion Failed &#x2F; delete problem]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich habe jetzt des öfteren ein Problem beim umgang mit delete und vermute das ich da irgend ein verständniss Problem habe. Vielleicht kann mir da jemand auf die Sprünge helfen:</p>
<p>Und zwar erzeuge ich innerhalb von Funktionen neue Objekte von der Klasse C_Command und möchte danach den Speicher an einer anderen Stelle wieder freigeben. Jedoch enhält as Objekt auch einen zeiger auf eine BYTE array welches ich auch dynamisch allociert habe. Wenn ich das dann freigebe (Zeile 20) und danach das Objekt selbst lösche bekomme ich eine &quot;Debug Assertion Failed&quot; (siehe screenshot).</p>
<p><a href="http://img339.imageshack.us/i/debug.jpg/" rel="nofollow"></a><a href="http://img339.imageshack.us/img339/56/debug.th.jpg" rel="nofollow">http://img339.imageshack.us/img339/56/debug.th.jpg</a></p>
<p>wo liegt hier das Problem?</p>
<pre><code>bool C_Server::ReciveString(SOCKET socket, char* buf, int buflen)
{
	Packet *packet = C_Winsock::receivPacket(socket);
	if(packet == 0)
		return false;
	C_Command* cmd = C_Codec::decodeCmd(packet-&gt;data);

	if(cmd-&gt;commandID == STRING)
	{
		string temp = C_Codec::decodeString(cmd);
		memcpy(buf, temp.c_str(), buflen);
		buf[buflen-1] = '\0';
	}
	else
		buf[0] = '\0';

	delete packet-&gt;data;
	delete packet;

	delete cmd-&gt;pData; // führt zu fehler
	delete cmd;

	return true;
}
</code></pre>
<p>wenn ich delete [] cmd-&gt;pData schreibe, passiert genau das gleiche.</p>
<p>Auszug aus der decodeCmd Funktion</p>
<pre><code>C_Command* C_Codec::decodeCmd(BYTE *bytes)
{
	unsigned int datalen;	
	memcpy((void*)&amp;datalen, (void*)&amp;bytes[1], sizeof(unsigned int));

	char * pData = new char[datalen];
	memcpy(pData, &amp;bytes[5], datalen);

	C_Command* cmd = new C_Command(bytes[0], datalen, (BYTE*)pData);

	return cmd;
}
</code></pre>
<p>Ich bin für alle Hinweise dankbar!<br />
Grüße Crispy!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/259364/debug-assertion-failed-delete-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 22:05:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/259364.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 22 Jan 2010 01:23:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug Assertion Failed &#x2F; delete problem on Fri, 22 Jan 2010 01:24:06 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>ich habe jetzt des öfteren ein Problem beim umgang mit delete und vermute das ich da irgend ein verständniss Problem habe. Vielleicht kann mir da jemand auf die Sprünge helfen:</p>
<p>Und zwar erzeuge ich innerhalb von Funktionen neue Objekte von der Klasse C_Command und möchte danach den Speicher an einer anderen Stelle wieder freigeben. Jedoch enhält as Objekt auch einen zeiger auf eine BYTE array welches ich auch dynamisch allociert habe. Wenn ich das dann freigebe (Zeile 20) und danach das Objekt selbst lösche bekomme ich eine &quot;Debug Assertion Failed&quot; (siehe screenshot).</p>
<p><a href="http://img339.imageshack.us/i/debug.jpg/" rel="nofollow"></a><a href="http://img339.imageshack.us/img339/56/debug.th.jpg" rel="nofollow">http://img339.imageshack.us/img339/56/debug.th.jpg</a></p>
<p>wo liegt hier das Problem?</p>
<pre><code>bool C_Server::ReciveString(SOCKET socket, char* buf, int buflen)
{
	Packet *packet = C_Winsock::receivPacket(socket);
	if(packet == 0)
		return false;
	C_Command* cmd = C_Codec::decodeCmd(packet-&gt;data);

	if(cmd-&gt;commandID == STRING)
	{
		string temp = C_Codec::decodeString(cmd);
		memcpy(buf, temp.c_str(), buflen);
		buf[buflen-1] = '\0';
	}
	else
		buf[0] = '\0';

	delete packet-&gt;data;
	delete packet;

	delete cmd-&gt;pData; // führt zu fehler
	delete cmd;

	return true;
}
</code></pre>
<p>wenn ich delete [] cmd-&gt;pData schreibe, passiert genau das gleiche.</p>
<p>Auszug aus der decodeCmd Funktion</p>
<pre><code>C_Command* C_Codec::decodeCmd(BYTE *bytes)
{
	unsigned int datalen;	
	memcpy((void*)&amp;datalen, (void*)&amp;bytes[1], sizeof(unsigned int));

	char * pData = new char[datalen];
	memcpy(pData, &amp;bytes[5], datalen);

	C_Command* cmd = new C_Command(bytes[0], datalen, (BYTE*)pData);

	return cmd;
}
</code></pre>
<p>Ich bin für alle Hinweise dankbar!<br />
Grüße Crispy!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843030</guid><dc:creator><![CDATA[Crispy128]]></dc:creator><pubDate>Fri, 22 Jan 2010 01:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to Debug Assertion Failed &#x2F; delete problem on Fri, 22 Jan 2010 01:29:18 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">delete packet-&gt;data;
    delete packet;

    delete cmd-&gt;pData; // führt zu fehler
    delete cmd;
</code></pre>
<p>das hier sieht falsch aus...</p>
<p>wofür steht das ständige C_ vor den ganzen Typen? Für Class oder für C?<br />
Falls das da C++ sein sollte: Nein, ists nicht... gibt ziemlich viele Dinge, die da potthässlich sind...</p>
<p>ansonsten zeig mal:<br />
Packet (Deklaration + CTor / DTor)<br />
C_Command (Deklaration + CTor / DTor)</p>
<p>bb</p>
<p>PS:<br />
ReciveString<br />
receivPacket</p>
<p>gz! <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>
<p>PPS:</p>
<blockquote>
<p>Auszug aus der decodeCmd Funktion</p>
</blockquote>
<p>Dir ist klar, dass das ganze weder Plattformunabhängig noch hübsch ist? (und vermutlich auch nicht all zu performant)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1843031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1843031</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 22 Jan 2010 01:29:18 GMT</pubDate></item></channel></rss>