Mam dwa bloki kodu o new[]
i delete[]
:Po p = nowy ciąg [0] i p = nowy int [0], dlaczego wersja łańcucha ulega awarii podczas usuwania [] p?
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2), w tym przypadku, ja po prostu zmienić std::string
do int
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
Moje pytanie brzmi:
Dlaczego pierwszy program ulega awarii z następującym komunikatem (w środowisku Linux):
Segmentation fault (core dumped)
Ale drugi program działa dobrze bez żadnego błędu?
EDIT
kompilator: g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
wystarczy użyć g++
bez żadnego argumentu, aby go skompilować.
Jeśli jest to błąd kompilatora, czy wystąpi awaria czy nie, zgodnie ze standardem?
Wygląda jak błąd kompilatora – Andrey
To nie psuje tutaj. Który kompilator używasz (z dokładną wersją) i jak go kompilujesz? – amaurea
Awaria za pomocą g ++ (4.7 i 4.8), nie ulega awarii z powodu klang. Zgaduję, że jest to błąd w g ++. – kennytm