estouro de pilha é um erro de aplicativo que ocorre sempre que há muita memória alocada na pilha de chamadas em tempo de execução de um aplicativo. No sistema operacional , esta pilha de chamadas é, literalmente, uma "pilha de memória ", no qual as variáveis de programação e chamadas de procedimento são armazenados para uso dentro do escopo atual de execução. As principais causas de estouro de pilha de recursão são variáveis e pilha infinitas que são muito grandes . Uma terceira causa , embora de forma menos provável , pode ocorrer devido a perda do ponteiro de pilha em memória . Recursão Infinita
infinita recursão faz com que a pilha de chamadas para transbordar na maioria das linguagens de computador. Quando um procedimento ou função chama um outro procedimento ou função , a informação anterior sobre a pilha de chamadas é mantido e as informações da nova função é alocada no topo da pilha. Quando uma função que chama a si mesma recursivamente sem um meio claro de rescisão, a aplicação irá alocar mais memória para a pilha de forma contínua até que mais memória é alocada a disponível na pilha, resultando em estouro de pilha.
Muito grandes variáveis de pilha
variáveis que são declaradas na pilha incluem variáveis de entrada em um procedimento, o valor de retorno para o procedimento e nenhum membro variáveis usadas nos cálculos. Isso pode resultar em estouro de pilha se o tamanho combinado da chamada de procedimento e suas variáveis é maior do que a memória de pilha disponível.
Pointer Stack Loss
Stack perda ponteiro ocorre sempre que a memória na pilha torna-se corrompido . Isso pode ocorrer ao tentar acessar as funções ou dados na memória que já foram apuradas , por exemplo. Se isso acontecer, uma forma única de recursão ocorre , resultando na aplicação tentando descobrir a informação de base de um determinado conjunto de dados . Porque a informação tecnicamente não existe , o comportamento da aplicação torna-se indefinida, e um fluxo interminável de chamadas de função tornam-se possíveis . Essa limitação ocorre principalmente somente em de baixo nível, linguagens orientadas a objetos , como C + +.