O que é um estouro de número inteiro?
Estouro de número inteiro refere-se ao fenômeno que ocorre em certos tipos de dados de computador em que seus sinais mudam de positivo para negativo, ou vice-versa, quando atingem o final de seus intervalos aplicáveis. Nos intervalos de computadores, os tipos de dados inteiros têm intervalos circulares e, quando atingem uma extremidade do intervalo, passam imediatamente para a outra extremidade do intervalo. Isso também é chamado de excesso de número inteiro.
Um número inteiro assinado pode conter um intervalo de valores de -2 31 a (2 31 ) - 1. Esse número inteiro não pode ter um valor de (-2 31 ) - 1; em vez disso, o próximo número para o qual ele é incrementado fica no outro extremo do seu intervalo: (2 31 - 1). A mudança de negativo para positivo no final de seu intervalo é um exemplo de excesso de número inteiro. Da mesma forma, um número inteiro não pode ter um valor de 2 31 ; esse valor mudaria para o outro extremo do seu intervalo e se tornaria -2 31 .
Esse estouro tem consequências significativas durante a programação. Uma matriz só pode ter tantos índices quanto o tipo inteiro permitir, e índices negativos não contam. Se um programador tentar criar uma matriz maior do que o tipo inteiro permite, erros significativos de memória podem ocorrer porque o estouro de número inteiro resultaria em um índice negativo. Isso é especialmente perigoso em linguagens que não têm limites explícitos para verificar matrizes, como C ++.
Quando ocorre um estouro de número inteiro, podem ocorrer tipos relacionados de estouro de buffer, como estouro de buffer, estouro de pilha e estouro de buffer de pilha. Em todos esses casos, o excesso de número inteiro atua para sobrecarregar as estruturas de memória com mais dados do que essas estruturas podem suportar. Esses estouros, em programas simples, geralmente não fazem muito mais do que causar um erro de leitura ou gravação inválido. A manipulação deste problema por hackers, no entanto, pode criar erros de memória que podem causar problemas mais sérios.
Na maioria dos programas simples, o excesso de número inteiro não é um grande problema. Os limites do tipo inteiro são suficientemente grandes para que o problema do estouro não entre em jogo, a menos que muitos dados estejam sendo tratados ao mesmo tempo. Em alguns casos, o estouro pode ser atenuado, como no caso de incrementar contadores, usando um tipo de dados maior com um intervalo maior. O tipo de dados maior pode, em teoria, eventualmente encontrar o mesmo problema de estouro, mas à medida que os intervalos de tipo de dados aumentam, as chances de fazê-lo diminuem. O intervalo de cada tipo de dado inteiro é pelo menos o dobro do tamanho do próximo menor, portanto, há amplo espaço para dados adicionais.