私は2つのコードブロックに関するnew[]
とdelete[]
ありますp = new string [0]およびp = new int [0]の後、delete [] pのときに文字列バージョンがクラッシュする理由を教えてください。
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2)この場合、私は単に私の質問があるstd::string
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
int
へ
を変更します。
なぜ最初のプログラムは、(Linux環境での)次のメッセージでクラッシュ:
Segmentation fault (core dumped)
しかし、第2のプログラムがエラーなしでうまく動作しますか?
EDIT
コンパイラ:g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
私はちょうどそれをコンパイルするために引数なしg++
を使用しています。
コンパイラのバグであれば、標準に従ってクラッシュするかどうかは問題ですか?
は、それはここでクラッシュしない – Andrey
コンパイラのバグのように見えます。どのコンパイラを使用していますか(正確なバージョンで)、どのようにコンパイルしていますか? – amaurea
g ++(4.7と4.8)でクラッシュし、clangでクラッシュしません。私はg ++バグだと思う。 – kennytm