Por que new [-1] gera segfault, enquanto new [-2] lança bad_alloc?

Eu tentei testarbad_alloc exceção passando alguns argumentos negativos paranew[]. Ao passar pequenos números negativos, recebo o que esperava - abad_alloc. No entanto, ao passar-1, Vejo que meu objeto é construído milhares de vezes (imprimo contador estático no construtor) e o aplicativo termina com segfaul

new[] converte um número inteiro assinado emsize_t, assim-1 é o máximo desize_t e-2 é omaximum - 1 e assim por diante

Então por quenew[] lança uma exceção ao receber um número enorme, mas tenta alocar ao receber o máximo desize_t? Qual é a diferença entre1111...1 e1111...0 paranew[]? :)

Desde já, obrigado

questionAnswers(2)

yourAnswerToTheQuestion