と に関する 2 つのコード ブロックがありnew[]
ますdelete[]
。
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2)この場合、私はstd::string
単にint
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
私の質問は:
最初のプログラムが次のメッセージでクラッシュする理由 (Linux 環境で):
Segmentation fault (core dumped)
しかし、2 番目のプログラムはエラーなく正常に動作しますか?
編集
コンパイラ:g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
g++
引数なしでコンパイルするだけです。
それがコンパイラのバグである場合、標準に従ってクラッシュする必要がありますか?