<?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[Anfänger ( Zeiger &#x2F; Pointer )]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hoffe mir kann jmd. helfen.</p>
<p>Ich soll eine Struktur Kunde erstellen mit einer nr (int), einem betrag (float) und einem namen (Zeiger auf C-String).<br />
Beim Kopieren von Kundendaten sollen einfach zwei Zeiger auf diese Struktur übergeben werden.<br />
Dabei ist jedoch ggf. ein bereits existierender C-String zu löschen und ein neuer passender Länge zu allokieren.</p>
<p>Funktioniert jedoch irgendwie nicht bei mir.</p>
<p>Ich glaube meine Fehler liegen beim setzten bzw. löschen des C-Strings. Irgendwas will da noch nicht wie ich will.</p>
<p>Beim ausführen kommt immer &quot;unbehandelte Ausnahme bei x0.... Zugriffsverletzung beim lesen an Position 0x000..</p>
<pre><code>struct neuKunde
{
	int knr;
	float betrag;
	char *name;
};

void initneuKunde(neuKunde *k);
void copyneuKunde(const neuKunde *von, neuKunde *nach);
void deleteneuKunde(neuKunde *k);
void setneuKunde(int knr, float betrag, char *name, neuKunde *k);

void initneuKunde(neuKunde *k)
{
	k-&gt;betrag = 0.0;
	k-&gt;knr = 0;
	k-&gt;name = NULL;
}
void copyneuKunde(const neuKunde *von, neuKunde *nach)
{
	if( nach-&gt;name != NULL )
	{
		delete [] nach-&gt;name;
		nach-&gt;name = NULL;
	}
	nach-&gt;name = new char[strlen(von-&gt;name)];
	strcpy(nach-&gt;name, von-&gt;name);
	nach-&gt;knr = von-&gt;knr;
	nach-&gt;betrag = von-&gt;betrag;
}
void print(neuKunde *k)
{
	cout &lt;&lt; k-&gt;betrag &lt;&lt; &quot;  &quot; &lt;&lt; k-&gt;knr &lt;&lt; &quot;  &quot; &lt;&lt; k-&gt;name &lt;&lt; endl;
}
void deleteneuKunde(neuKunde *k)
{
		k-&gt;betrag = 0.0;
		k-&gt;knr = 0;
		delete [] k-&gt;name;
}
void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
	k-&gt;knr = knr;
	k-&gt;betrag = betrag;
	if( k-&gt;name != NULL )
	{
		delete [] k-&gt;name;
		*k-&gt;name = NULL;
	}
	strcpy(k-&gt;name, name);
}

int main()
{
	neuKunde *k = new neuKunde();
	initneuKunde(k);
	neuKunde *kk = new neuKunde();
	initneuKunde(kk);
	copyneuKunde(k,kk);
	cout &lt;&lt; &quot;neu&quot;;
	print(kk);
	cout &lt;&lt; &quot;delete alt -&gt; neu nochmal&quot;;
	delete k;
	print(kk);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/278927/anfänger-zeiger-pointer</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 11:01:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278927.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Dec 2010 16:49:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 16:49:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hoffe mir kann jmd. helfen.</p>
<p>Ich soll eine Struktur Kunde erstellen mit einer nr (int), einem betrag (float) und einem namen (Zeiger auf C-String).<br />
Beim Kopieren von Kundendaten sollen einfach zwei Zeiger auf diese Struktur übergeben werden.<br />
Dabei ist jedoch ggf. ein bereits existierender C-String zu löschen und ein neuer passender Länge zu allokieren.</p>
<p>Funktioniert jedoch irgendwie nicht bei mir.</p>
<p>Ich glaube meine Fehler liegen beim setzten bzw. löschen des C-Strings. Irgendwas will da noch nicht wie ich will.</p>
<p>Beim ausführen kommt immer &quot;unbehandelte Ausnahme bei x0.... Zugriffsverletzung beim lesen an Position 0x000..</p>
<pre><code>struct neuKunde
{
	int knr;
	float betrag;
	char *name;
};

void initneuKunde(neuKunde *k);
void copyneuKunde(const neuKunde *von, neuKunde *nach);
void deleteneuKunde(neuKunde *k);
void setneuKunde(int knr, float betrag, char *name, neuKunde *k);

void initneuKunde(neuKunde *k)
{
	k-&gt;betrag = 0.0;
	k-&gt;knr = 0;
	k-&gt;name = NULL;
}
void copyneuKunde(const neuKunde *von, neuKunde *nach)
{
	if( nach-&gt;name != NULL )
	{
		delete [] nach-&gt;name;
		nach-&gt;name = NULL;
	}
	nach-&gt;name = new char[strlen(von-&gt;name)];
	strcpy(nach-&gt;name, von-&gt;name);
	nach-&gt;knr = von-&gt;knr;
	nach-&gt;betrag = von-&gt;betrag;
}
void print(neuKunde *k)
{
	cout &lt;&lt; k-&gt;betrag &lt;&lt; &quot;  &quot; &lt;&lt; k-&gt;knr &lt;&lt; &quot;  &quot; &lt;&lt; k-&gt;name &lt;&lt; endl;
}
void deleteneuKunde(neuKunde *k)
{
		k-&gt;betrag = 0.0;
		k-&gt;knr = 0;
		delete [] k-&gt;name;
}
void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
	k-&gt;knr = knr;
	k-&gt;betrag = betrag;
	if( k-&gt;name != NULL )
	{
		delete [] k-&gt;name;
		*k-&gt;name = NULL;
	}
	strcpy(k-&gt;name, name);
}

int main()
{
	neuKunde *k = new neuKunde();
	initneuKunde(k);
	neuKunde *kk = new neuKunde();
	initneuKunde(kk);
	copyneuKunde(k,kk);
	cout &lt;&lt; &quot;neu&quot;;
	print(kk);
	cout &lt;&lt; &quot;delete alt -&gt; neu nochmal&quot;;
	delete k;
	print(kk);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995010</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 16:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:10:55 GMT]]></title><description><![CDATA[<p>In Print fehlt eine Abfrage auf NULL:</p>
<pre><code class="language-cpp">cout &lt;&lt; k-&gt;betrag &lt;&lt; &quot; &quot; &lt;&lt; k-&gt;knr ;
if(k-&gt;name != NULL)
    cout &lt;&lt; &quot; &quot; &lt;&lt; k-&gt;name;
cout &lt;&lt; endl;
</code></pre>
<p>In Copy fehlen auch noch Abfragen auf NULL.</p>
<pre><code class="language-cpp">nach-&gt;name = new char[strlen(von-&gt;name)];
</code></pre>
<p>funktioniert nicht wenn von-&gt;name = NULL ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995022</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:10:55 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:13:54 GMT]]></title><description><![CDATA[<p>Ok Danke.</p>
<p>Muss das dann also so aussehen (copy)</p>
<pre><code class="language-cpp">void copyneuKunde(const neuKunde *von, neuKunde *nach)
{
    if( nach-&gt;name != NULL )
    {
        delete [] nach-&gt;name;
        nach-&gt;name = NULL;
        nach-&gt;name = new char[strlen(von-&gt;name)];
    }
    //nach-&gt;name = new char[strlen(von-&gt;name)];
    strcpy(nach-&gt;name, von-&gt;name);
    nach-&gt;knr = von-&gt;knr;
    nach-&gt;betrag = von-&gt;betrag;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995024</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:13:54 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:21:13 GMT]]></title><description><![CDATA[<p>Nein. Du musst von-&gt;name prüfen du kannst nicht einen strlen auf einen char der Länge (nicht vorhandneen pointer) ausführen!</p>
<pre><code class="language-cpp">if(von-&gt;name != NULL)
	{
		nach-&gt;name = new char[strlen(von-&gt;name)]; //eventuell fehlt hier noch +1 wegen '/0'
		strcpy(nach-&gt;name, von-&gt;name);
	}
	else
	{
		nach-&gt;name = new char[100];
		nach-&gt;name = &quot;test&quot;;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995029</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995029</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:23:32 GMT]]></title><description><![CDATA[<p>Und es funktioniert immernoch nicht..<br />
Er fliegt immer bei copy raus.</p>
<pre><code>void copyneuKunde(const neuKunde *von, neuKunde *nach)
{
    if( nach-&gt;name != NULL )
    {
        delete [] nach-&gt;name;
        nach-&gt;name = NULL;
    }
    nach-&gt;name = new char[strlen(von-&gt;name)];
    strcpy(nach-&gt;name, von-&gt;name);
    nach-&gt;knr = von-&gt;knr;
    nach-&gt;betrag = von-&gt;betrag;
}
</code></pre>
<p>So wie ich das verstehe, wird ja bei init der Zeiger bzw. der C-String auf NULL gesetzt.<br />
Dann bei copyneuKunde wird geprüft, ist der Zeiger NICHT NULL, also muss was drin stehen, dann gibt man den Speicher frei und setzt den Zeiger auf NULL. Ist der Zeiger jedoch schon NULL kann man gleich mit strcpy() den C-String kopieren.</p>
<p>So funktioniert es doch auch oder?<br />
Kann mir das vllt. jemand erklären was ich da falsch programmiert habe..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995032</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:23:32 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:31:16 GMT]]></title><description><![CDATA[<p>Warum muss es ausgerechnet char sein? Warum kein std::string?</p>
<p>Edit: Und warum struct, das Ganze ist viel sinnvoller in einer Klasse untergebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995034</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:31:16 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:32:00 GMT]]></title><description><![CDATA[<p>So is es als Aufgabe.<br />
Ich lern das grad und wir sollen jetzt C-Strings lernen -.- ^^</p>
<p>Oder vllt. kannst du mir einfach grob erklären.. weil ich versteh das noch nich.</p>
<p>wenn das char array nicht NULL ist... muss man es zuerst löschen und den Zeiger auf NULL setzen.<br />
Aber in deiner copyneuKunde funktion ist gar kein delete etc. drin.<br />
Oder macht das iwas anderes von alleine oder... ?!</p>
<p>Oder das hier:</p>
<pre><code class="language-cpp">void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
	k-&gt;knr = knr;
	k-&gt;betrag = betrag;

	if( k-&gt;name != NULL )
	{
		delete [] k-&gt;name;
		*k-&gt;name = NULL;
	}

	strcpy(k-&gt;name, name);
}
</code></pre>
<p>Funktioniert auch nicht, bestimmt wegen dem Delete!?<br />
Aber wir sollen den Speicher aufräumen und neu allokieren usw.<br />
Ich glaube das is hier das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995036</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:32:00 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:35:42 GMT]]></title><description><![CDATA[<p>wie oben schon beschrieben dir fehlt eine Abfrage:</p>
<pre><code class="language-cpp">void copyneuKunde(const neuKunde *von, neuKunde *nach) 
{ 
    if( nach-&gt;name != NULL ) 
    { 
        delete [] nach-&gt;name; 
        nach-&gt;name = NULL; 
    }

	if(von-&gt;name != NULL)
	{
		nach-&gt;name = new char[strlen(von-&gt;name + 1)]; 
		strcpy(nach-&gt;name, von-&gt;name);
	}
	else
	{
		nach-&gt;name = new char[100];
		nach-&gt;name = &quot;test&quot;;
	}

    nach-&gt;knr = von-&gt;knr; 
    nach-&gt;betrag = von-&gt;betrag; 
}
</code></pre>
<p>Edit: Bei deiner letzten Funktion fehlt wieder das new!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995040</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 17:45:29 GMT]]></title><description><![CDATA[<p>Danke für deine Hilfe !!</p>
<p>Habs jetzt so.<br />
Funktioniert jetzt eigentlich auch soweit.</p>
<p>Kann ich irgendwie prüfen, ob der Speicher auf wirklich freigegeben wurde wenn ich mittels deleteneuKunde() einen Kunden lösche?</p>
<pre><code class="language-cpp">void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
	if(k-&gt;name != NULL)
	{
		delete [] k-&gt;name;
		k-&gt;name = NULL;
	}
	k-&gt;name = new char[strlen(name)+1];
	strcpy(k-&gt;name,name);
	k-&gt;knr = knr;
	k-&gt;betrag = betrag;
}

void copyneuKunde(const neuKunde *von, neuKunde *nach)
{
    if( nach-&gt;name != NULL )
    {
        delete [] nach-&gt;name;
        nach-&gt;name = NULL;
    }

    if(von-&gt;name != NULL)
    {
        nach-&gt;name = new char[strlen(von-&gt;name + 1)];
        strcpy(nach-&gt;name, von-&gt;name);
    }
    else
    {
        nach-&gt;name = new char[100];
        nach-&gt;name = &quot;test&quot;;
    }

    nach-&gt;knr = von-&gt;knr;
    nach-&gt;betrag = von-&gt;betrag;
}

void deleteneuKunde(neuKunde *k)
{
		k-&gt;betrag = 0.0;
		k-&gt;knr = 0;
		delete [] k-&gt;name;
		*k-&gt;name = NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995042</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 17:45:29 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 18:10:37 GMT]]></title><description><![CDATA[<p>Schau mal auf Zeile 42, da ist noch ein Fehler. Der Zeiger muss NULL werden und nicht der Wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995052</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 18:10:37 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 18:26:25 GMT]]></title><description><![CDATA[<p>Stimmt !!</p>
<p>Danke, funktioniert so.</p>
<p>Ich denk mal das funktioniert auch richtig das er den Speicher löscht usw... !?</p>
<p>Danke dir !! :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995059</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Wed, 15 Dec 2010 18:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Wed, 15 Dec 2010 18:52:00 GMT]]></title><description><![CDATA[<p>Sofern du void deleteneuKunde(neuKunde *k) und delete k; machst ja, nur delete k wird nicht reichen. Eventuell überlegst du dir noch wie du den Programmabsturz bei setneuKunde() vermeidest, wenn ein char* = NULL übergeben wird.(Tipp auf NULL prüfen.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995068</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Wed, 15 Dec 2010 18:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Thu, 16 Dec 2010 13:09:50 GMT]]></title><description><![CDATA[<p>Ja stimmt, würde ich einfach so machen...<br />
Und wenn NULL übergeben wird.. dann wird halt gar nichts gemacht.. gibt ja dann nichts zum setten...</p>
<pre><code class="language-cpp">void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
    if( k != NULL )
    {
        k-&gt;knr = knr;
        k-&gt;betrag = betrag;
        if( k-&gt;name != NULL )
        {
            delete [] k-&gt;name;
            *k-&gt;name = NULL;
        }
        strcpy(k-&gt;name, name);
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995317</guid><dc:creator><![CDATA[currency]]></dc:creator><pubDate>Thu, 16 Dec 2010 13:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Thu, 16 Dec 2010 23:05:51 GMT]]></title><description><![CDATA[<p>currency schrieb:</p>
<blockquote>
<p>Und wenn NULL übergeben wird.. dann wird halt gar nichts gemacht.. gibt ja dann nichts zum setten...</p>
</blockquote>
<p>Ist das wirklich sinnvoll? Gibt es Situationen, in denen der Benutzer <code>NULL</code> übergibt, um nichts zu tun?</p>
<p>Ich habe eher das Gefühl, du willst damit Fehler vermeiden, die durch Nullzeiger-Dereferenzierung entstehen. Tatsächlich erreichst du aber das Gegenteil: Wenn <code>NULL</code> als Parameter zulässig ist und einfach nichts passiert, können sich Logikfehler einschleichen. Denn du merkst nicht unmittelbar, dass ein gewünschter Aufruf keinen Effekt hat. Zudem verleitet diese Semantik dazu, es im Anwendercode mit Nullzeigern ebenfalls nicht so genau zu nehmen.</p>
<p>Und dabei haben wir die Tatsache gar noch nicht berücksichtigt, dass die vielen If-Abfragen den Code unnötig hässlich machen.</p>
<p>Deshalb: Gültigkeit des Zeiger als Precondition voraussetzen. Damit du solche Fehler gleich bemerkst, kannst du Assertions einsetzen:</p>
<pre><code class="language-cpp">void setneuKunde(int knr, float betrag, char *name, neuKunde *k)
{
    assert( k != NULL );
    // Restlicher Code (ohne if) wie bisher
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1995590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995590</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Dec 2010 23:05:51 GMT</pubDate></item><item><title><![CDATA[Reply to Anfänger ( Zeiger &#x2F; Pointer ) on Thu, 16 Dec 2010 23:24:13 GMT]]></title><description><![CDATA[<p>Übrigens: Der Code ist <strong>grauenhaft</strong>. Du solltest wissen, dass man C++ nicht so programmiert. Was du machst ist C-Code, der in Klassen eingepackt ist. Und dann ist es noch schlechter C-Code. Nimm das nicht persönlich, aber es gibt nichts Schlimmeres, als sowas schönzureden. <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>Damit du mit dieser Aussage auch was anfangen kannst, hier ein paar Verbesserungsvorschläge. Ich verstehe, falls du gewisse Dinge hiervon noch nicht kennst, aber du könntest dir diese für später merken oder wieder einmal zu diesem Thread zurückkehren. Denn es handelt sich um Punkte, die in C++ zu den <strong>essentiellen Grundlagen</strong> gehören.</p>
<ul>
<li>Verwende Code wieder. Innerhalb <code>copyneuKunde</code> kannst du zum Beispiel <code>deleteneuKunde</code> aufrufen, um den Zielkunden zu überschreiben.</li>
<li>Klassen sind unter Anderem gerade dazu da, externe Funktionen zur Implementierung trivialer Funktionalität wie dem Kopieren eines Objekts zu vermeiden. Du wirst sicher noch was von Konstruktor, Kopierkonstruktor, Zuweisungsoperator und Destruktor hören.</li>
<li>Grundsätzlich wird in modernem C++ manuelle Speicherverwaltung vermieden, wo es nur geht, und durch Konzepte wie RAII abgelöst. Auch die Zeichenkettenverwaltung mit C-Strings ist inhärent fehleranfälig und unkonfortabel. In C++ gäbe es dafür <code>std::string</code> .</li>
<li>Dazu gibts noch kleinere Fehler, die mit dem gerade erwähnten Punkt zusammenhängen. Zum einen hast du bei</li>
</ul>
<pre><code class="language-cpp">delete [] k-&gt;name; 
*k-&gt;name = NULL;
</code></pre>
<p>eine Dereferenzierung zu viel, zum anderen darfst du nicht mit</p>
<pre><code class="language-cpp">strcpy(k-&gt;name, name);
</code></pre>
<p>in einen Nullzeiger kopieren. Und hier</p>
<pre><code class="language-cpp">nach-&gt;name = new char[100];
nach-&gt;name = &quot;test&quot;;
</code></pre>
<p>hast du ein Memory Leak, weil du gleich <code>nach-&gt;name</code> überschreibst.</p>
<p>Was mich hingegen eher erstaunt, ist, dass du bereits Const-Correctness (bei <code>copyneuKunde()</code> ) richtig anwendest. Das beachten viele Leute, die C++ lernen, eher spät.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1995596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1995596</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 16 Dec 2010 23:24:13 GMT</pubDate></item></channel></rss>