Wieder Speicher reservieren für einen Zeiger.
-
Hallo, ich programmiere zur Übung an einer eigenen String-Klasse. Hatte schon einige Probleme mit der Klasse, aber alle gelöst.
Jetzt bin ich hier hängen geblieben.
void string::cpychar(const char* str) { m_string = new char[parsx::len(str)+1]; m_counter = 0; while(str[m_counter]) { m_string[m_counter]=str[m_counter]; m_counter++; } m_string[m_counter]='\0'; }
Diese Methode soll einen String in m_string kopieren.
Definition von m_string:
char* m_string
Nun sollte ich bei der Speicherzuweisung:
m_string = new char[parsx::len(str)+1];
den Speicher erst einmal wieder löschen.
so:
if(m_string) delete[] m_string;
geht jedoch nicht. Das Programm schmiert genau hier ab.
Wie macht man sowas richtig ???
-
also eigentlich mach man es genau so richtig.
ich würd mal überprüfen, ob der zeiger auch nocht auf die gleiche adresse zeigt, wie beim erstellen. also nicht das du ihn aus versehen oder so auf eine andere andresse zeigen lässt.
if(m_string) überprüft ja nur ob der zeiger nicht NULL ist, nicht das er noch gültig ist.
ausserdem würd ich bei der schleife lieber
[cpp] while(str[m_counter] != '\0' )
{
m_string[m_counter]=str[m_counter];
m_counter++;
}[/cpp]
schreiben. ist viel aussagekräftiger. oder gleich memcpy(m_string, str, parsx::len(str)+1) einsetzen, ist viel schneller.