Eigene Stringklasse verursacht einen Absturz
-
Minimales, compilierbares Beispiel erstellen.
-
Hallo, während ich schrieb, ist von die neuer input gekommen:
if (m_string) delete[] m_string;
delete [] bezieht sich nur auf Arrays!!
Gruss Jerry
-
m_string ist doch ein Array!!!
-
Die String-Klasse ist doch wohl eher bei den Containern zu suchen, oder? Da muss ich aber nachgucken. Jedenfalls ist ein string kein Array!
Gruss Jerry :p
-
ein char-Array ist ein Array
-
h² schrieb:
Der Fehler ist im Destruktor.
parsx::~parsx() { if(m_string) delete[] m_string; }
Hier stürzt er ab.
1. brauchst du m_string nicht auf NULL zu überprüfen; du kannst an delete/delete[] gefahrlos einen Nullzeiger übergeben.
2. könnte es sein, daß m_string im Konstruktor nicht auf NULL gesetzt wird?
3. auch, wenn du einen neuen String hineinkopierst (wie in der cpychar-Methode) solltest du den ggf. vorhandenen alten String zunächst delete[]n.Trotzdem: erstelle ein lauffähiges Minimalbeispiel, indem du alle Funktionen, in die mit dem Problem nicht unmittelbar zusammenhängen, rausschmeißt; das kannst du dann ja hier posten.
Moritz
-
undef schrieb:
ein char-Array ist ein Array
Da sind wir beide auf die Nase gefallen. Die Definition ist:
const char* string
ist also ein Zeiger auf eine konstante Zeichenkette. Delete darf aber nur im Zusammenhang mit new angewendet werden! Das dürfte die Lösung sein!!
Nix für ungut.
Gruss Jerry
-
er hat doch:
m_string = new char[len (str)+1];
-
dumm????? schrieb:
er hat doch:
m_string = new char[len (str)+1];
Nein, nein, ich habs selbst gemerkt. Alzheimer lässt grüssen. Sorry.
-
dumm????? schrieb:
er hat doch:
m_string = new char[len (str)+1];
Nein, nein, ich habs selbst gemerkt. Alzheimer lässt grüssen. Sorry.