2012-04-26 5 views

Antwort

9
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.

+0

AH! Das stimmt ... danke. – Jake

5

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.

+0

+1 weil du zuerst warst – Jake

2

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.

Verwandte Themen