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