我有兩個代碼塊約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
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++
不帶任何參數進行編譯。
如果它是一個編譯器錯誤,它們應該按照標準崩潰還是不崩潰?
貌似編譯器故障 – Andrey
它不這裏崩潰。你正在使用哪種編譯器(使用確切版本)以及如何編譯它? – amaurea
g ++(4.7&4.8)崩潰,不會與鏗鏘聲崩潰。我想這是一個g ++的錯誤。 – kennytm