Tôi có hai khối mã về new[]
và delete[]
:Sau khi p = chuỗi mới [0] và p = new int [0], tại sao phiên bản chuỗi bị treo khi xóa [] p?
1)
#include <string>
int main()
{
std::string *p = new std::string[0];
delete[] p;
return 0;
}
2) Trong trường hợp này, tôi chỉ đơn thuần là thay đổi std::string
để int
int main()
{
int *p = new int[0];
delete[] p;
return 0;
}
Câu hỏi của tôi là:
Tại sao chương trình đầu tiên gặp sự cố với thông báo sau (trong môi trường linux):
Segmentation fault (core dumped)
Nhưng chương trình thứ hai hoạt động tốt mà không có bất kỳ lỗi nào?
EDIT
biên dịch: g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
tôi chỉ sử dụng g++
mà không cần bất kỳ lý lẽ để biên dịch nó.
Nếu đó là lỗi trình biên dịch, chúng có bị lỗi hay không theo tiêu chuẩn?
Trông giống như một trình biên dịch lỗi – Andrey
Nó không sụp đổ ở đây. Trình biên dịch bạn đang sử dụng (với phiên bản chính xác) và làm thế nào bạn biên dịch nó? – amaurea
Tai nạn với g ++ (4.7 & 4.8), không bị sập. Tôi đoán đó là một lỗi g ++. – kennytm