Tôi đã cố gắng kiểm tra bad_alloc
ngoại lệ bằng cách chuyển một số đối số phủ định đến new[]
. Khi vượt qua các số âm nhỏ tôi nhận được những gì tôi mong đợi - một bad_alloc
. Tuy nhiên, khi đi qua -1
, tôi có thể thấy rằng đối tượng của tôi được tạo hàng nghìn lần (tôi in bộ đếm tĩnh trong hàm tạo) và ứng dụng chấm dứt bằng segfault.Tại sao [-1] mới tạo ra segfault, trong khi [-2] mới ném bad_alloc?
new[]
chuyển đổi ký số nguyên để size_t
, vì vậy -1
là max của size_t
và -2
là maximum - 1
và vân vân.
Vậy tại sao new[]
ném ngoại lệ khi nhận được một số lượng lớn, nhưng cố gắng phân bổ khi nhận được tối đa size_t
? Sự khác biệt giữa 1111...1
và 1111...0
cho new[]
là gì? :)
Cảm ơn trước!
Phiên bản/trình điều khiển/trình biên dịch/trình biên dịch nào ... – xanatos
Thời gian đó tôi đã bỏ lỡ câu trả lời vì StackOverflow không gửi cho tôi bất kỳ thông báo nào, và bây giờ tôi không thể tái tạo vấn đề ... Tôi rất tiếc vì tôi đã không tạo ra các bãi lõi và không điều tra nó ... Bây giờ tôi không thể tái tạo vấn đề - đi qua -1 đến 'mới' dường như làm việc và ném ngoại lệ, trong khi vượt qua tối đa int phân bổ rất nhiều đối tượng nhưng không segfault. Tôi bắt đầu nghĩ rằng vấn đề là ở một nơi khác ... Tôi đưa ra một điểm cộng với Mystical để anh ta thử. – flyjohny