Ho due blocchi di codice su new[]
e delete[]
:Dopo p = nuova stringa [0] e p = nuova int [0], perché la versione della stringa si blocca quando si cancella [] p?
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2) In questo caso, mi limito a cambiare std::string
a int
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
La mia domanda è:
Perché i primi programma va in crash con il seguente messaggio (in ambiente Linux):
Segmentation fault (core dumped)
ma il secondo programma funziona bene senza alcun errore?
EDIT
compilatore: g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
mi basta usare g++
senza alcun argomento per compilarlo.
Se si tratta di un errore del compilatore, dovrebbero verificarsi un arresto anomalo o non conforme allo standard?
Sembra un bug del compilatore – Andrey
Esso non va in crash qui. Quale compilatore stai usando (con la versione esatta) e come lo stai compilando? – amaurea
Crash con g ++ (4.7 e 4.8), non si blocca con clang. Immagino sia un bug g ++. – kennytm