<?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[Bei delete Absturz]]></title><description><![CDATA[<p>Moin zusammen!</p>
<p>Ich habe folgende Klasse</p>
<pre><code class="language-cpp">class CPerson
{
private:
	char* m_szfirst_name;
//weitere Member

public:
	CPerson(char* first_name,char* last_name,char* adress,char* city,int plz);
	~CPerson();
};
</code></pre>
<p>Im Konstruktor wird Speicher für m_szfirst_name allociert und die Übergebenen Daten umkopiert.<br />
Das klappt alles soweit first_name hat nen gültigen Pointer und der Inhalt stimmt auch.<br />
Doch es kracht leider im Destruktor.<br />
Hier der Code dafür:</p>
<pre><code class="language-cpp">CPerson::~CPerson()
{
	printf(&quot;Destruktor Person\n&quot;);
	if (m_szfirst_name != NULL)
		delete [] m_szfirst_name;
}
</code></pre>
<p>Es wäre nett wenn mir jemand erklären könnte wie ich mein Programm richtig beenden kann ohne einen Fehler. Ich stehe nämlich deswegen ziemlich auf dem Schlauch, da ich ja mit delete[] ein Feld freigebe. Von welchem Datentyp sollte doch eigentlich egal sein, oder?</p>
<p>Vielen Dank<br />
BastlWastl</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138483/bei-delete-absturz</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 04:01:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138483.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 26 Feb 2006 18:25:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:25:16 GMT]]></title><description><![CDATA[<p>Moin zusammen!</p>
<p>Ich habe folgende Klasse</p>
<pre><code class="language-cpp">class CPerson
{
private:
	char* m_szfirst_name;
//weitere Member

public:
	CPerson(char* first_name,char* last_name,char* adress,char* city,int plz);
	~CPerson();
};
</code></pre>
<p>Im Konstruktor wird Speicher für m_szfirst_name allociert und die Übergebenen Daten umkopiert.<br />
Das klappt alles soweit first_name hat nen gültigen Pointer und der Inhalt stimmt auch.<br />
Doch es kracht leider im Destruktor.<br />
Hier der Code dafür:</p>
<pre><code class="language-cpp">CPerson::~CPerson()
{
	printf(&quot;Destruktor Person\n&quot;);
	if (m_szfirst_name != NULL)
		delete [] m_szfirst_name;
}
</code></pre>
<p>Es wäre nett wenn mir jemand erklären könnte wie ich mein Programm richtig beenden kann ohne einen Fehler. Ich stehe nämlich deswegen ziemlich auf dem Schlauch, da ich ja mit delete[] ein Feld freigebe. Von welchem Datentyp sollte doch eigentlich egal sein, oder?</p>
<p>Vielen Dank<br />
BastlWastl</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003569</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003569</guid><dc:creator><![CDATA[BastWastl]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:26:30 GMT]]></title><description><![CDATA[<p>Der Fehler liegt an anderer Stelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003570</guid><dc:creator><![CDATA[Kenner des Problems]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:33:40 GMT]]></title><description><![CDATA[<p>ich nehme mal an, in deinem konstruktor steht irgendwas der art</p>
<p>m_szfirst_name = first_name</p>
<p>jetzt gibt es zwei offensichtliche möglichkeiten:</p>
<p>1. der ursprüngliche pointer, der bei der instanziierung verwendet wurde, wurde bereits aufgeräumt, bevor deine klasse zerstört wird</p>
<p>2. du hast die klasse mit nem const instanziiert CPerson foo(&quot;Hans&quot;...) und delete greift dabei völlig ins leere</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003576</guid><dc:creator><![CDATA[denkt sich was]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:36:38 GMT]]></title><description><![CDATA[<p>achso, ne lösung ^^</p>
<p>variante 1: der pointer gehört nicht dem objekt, also kümmert es sich auch nicht drum, den aufzuräumen. das soll gefälligst derjenige machen, der das objekt verwenden will <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>variante 2: du erzeugst m_szfirst_name als neuen pointer auf char und kopierst den inhalt von first_name hinein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003580</guid><dc:creator><![CDATA[denkt sich was]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:40:10 GMT]]></title><description><![CDATA[<p>Noch nicht mal 10min für ne Antwort. WOW!!!</p>
<p>Also mein Konstruktor sieht so aus:</p>
<pre><code class="language-cpp">CPerson::CPerson(char* first_name,char* last_name,char* adress,char* city,int plz)
{
	printf(&quot;CPerson Konstruktor\n&quot;);

	//Speicher allocieren
	m_szfirst_name	= new char[strlen(first_name)];

	//Daten umkopieren
	strcpy(m_szfirst_name, first_name);
}
</code></pre>
<p>Ich mache in meinem Main bis jetzt nichts anderes als eine Person anzulegen und mit einer print Routine die einzellnen Variablen auf der Konsole auszugeben.<br />
Ich setze nirgendwo etwas auf NULL oder hantiere mit den Pointern weiter rum.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003585</guid><dc:creator><![CDATA[BastWastl]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 18:50:11 GMT]]></title><description><![CDATA[<p>new char[strlen(first_name) + 1];</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003596</guid><dc:creator><![CDATA[+1]]></dc:creator><pubDate>Sun, 26 Feb 2006 18:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 20:22:21 GMT]]></title><description><![CDATA[<p>Einen Copykonstruktor hast du nicht? Das kann - je nachdem, wie du die Klasse benutzt - ins Auge gehen.</p>
<p>Ach ja, die Prüfung auf ungleich Null vor delete ist komplett überflüssig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003680</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 26 Feb 2006 20:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 20:28:17 GMT]]></title><description><![CDATA[<p>Mit std::string wäre das nicht passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003688</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003688</guid><dc:creator><![CDATA[Der Schlaue]]></dc:creator><pubDate>Sun, 26 Feb 2006 20:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Bei delete Absturz on Sun, 26 Feb 2006 21:05:03 GMT]]></title><description><![CDATA[<blockquote>
<p>Mit std::string wäre das nicht passiert.</p>
</blockquote>
<p>Mag sein, aber das hat man uns nicht gezeigt.</p>
<p>Diese dumme dämliche &quot;+1&quot; vergesse ich doch jedes mal wieder. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Vielen Danke an alle für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1003717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1003717</guid><dc:creator><![CDATA[BastWastl]]></dc:creator><pubDate>Sun, 26 Feb 2006 21:05:03 GMT</pubDate></item></channel></rss>