我有两个关于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)
但是第二个程序运行良好没有任何错误?
编辑
编译器:g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
我只是使用g++
没有任何参数来编译它。
如果是编译器错误,它们是否应该按照标准崩溃?