Ich brauche eine C++ Auffrischung. Warum gibt es eine Speicherausnahme?Char * neu und löschen [] Fehler, wenn eine Zeichenfolge zugewiesen ist
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
Ich brauche eine C++ Auffrischung. Warum gibt es eine Speicherausnahme?Char * neu und löschen [] Fehler, wenn eine Zeichenfolge zugewiesen ist
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
Speicherplatz für 1024 Zeichen wird von Heap und pear
Punkte zu Beginn der zugeordnet.
pear = "happy go lucky";
pear
zeigt nun auf den Stringliteral, die in dem Nur-Lese-Segment befindet, und der zuvor zugewiesenen Speicher durchgesickert ist.
Sie versuchen, die schreibgeschützte Zeichenfolge freizugeben, bei der es sich um ein nicht definiertes Verhalten handelt, das sich als Laufzeitausnahme manifestiert.
AH! Das stimmt ... danke. – Jake
Birne = "glücklich gehen";
Diese ersetzt die durch new char[]
zugewiesen Zeiger. So versucht nun Ihre delete[] pear
die statisch zugewiesene Zeichenfolge freizugeben.
Das ist schlecht. Sie können nur delete
, was Sie mit new
zuweisen. Und da Sie diesen Zeiger überschrieben (und verloren) haben, können Sie nicht delete
es.
+1 weil du zuerst warst – Jake
Sie ordnen pear
einem zugewiesenen Array von Zeichen auf dem Heap zu und weisen es dann neu zu, um auf die Zeichenfolge zu verweisen, die sich an einem statischen Speicherort befindet. Wenn Sie versuchen, dies zu löschen, wird ein Fehler angezeigt, da Sie keine Inhalte an diesem statischen Speicherort löschen sollen.
ist die erste Zeile gleich 'char * pear = new char [1024];'? –