Ich habe zwei Codeblöcke über new[]
und delete[]
:Nach p = neuer String [0] und p = neuer int [0], warum die String-Version beim Löschen [] p abstürzt?
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2) In diesem Fall ich nur std::string
int
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
Meine Frage ist, ändern:
Warum? die ersten Programmabstürze mit der folgenden Meldung (in Linux-Umgebung):
Segmentation fault (core dumped)
Aber das zweite Programm funktioniert gut ohne Fehler?
EDIT
Compiler: g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
benutze ich nur g++
ohne Argument, es zu kompilieren.
Wenn es ein Compiler Bug ist, sollten sie abstürzen oder nicht nach dem Standard?
Sieht aus wie ein Compiler Fehler – Andrey
Es hier nicht abstürzen. Welchen Compiler benutzen Sie (mit genauer Version) und wie kompilieren Sie ihn? – amaurea
Absturz mit g ++ (4.7 & 4.8), stürzt nicht mit Klängen ab. Ich denke es ist ein g ++ Bug. – kennytm