Почему new[-1] segfault, а new[-2] выдает bad_alloc?

я попытался протестировать исключение bad_alloc, передав некоторые отрицательные аргументы в new[]. При передаче небольших отрицательных чисел я получаю то, на что и надеялся — bad_alloc. Однако при передаче -1я вижу, что мой объект создается тысячи раз (я печатаю статический счетчик в конструкторе), и приложение завершается с segfault.

new[]преобразует целое число со знаком в size_t, поэтому -1является максимальным из size_tи -2максимально - 1и так далее.

Так почему же new[]выдает исключение при получении какого-то огромного числа, но пытается выделить при получении максимального size_t? В чем разница между 1111...1и 1111...0для new[]? :)

Заранее спасибо!

12
задан Mysticial 13 March 2012 в 09:10
поделиться