? Um estouro de pilha ocorre quando a pilha , uma estrutura de dados crítica encontrada em cada programa em execução , ultrapassa seus limites de memória. Esta condição tem várias causas , todos os sintomas de erros de programação . Se o erro ocorrer em um programa de fonte comercial ou aberto , entre em contato de suporte técnico . Se o problema ocorrer ao testar seu próprio código, aqui estão alguns dos problemas mais comuns que podem ter ocorrido na linha 42. Background Fotografia de 
 A pilha de chamadas , a causa mais comum de estouros de pilha , tem uma lista de endereços de retorno de cada função ou chamada de método . Quando o programa começa , a pilha de chamadas estiver vazia, quando a primeira função é chamada , o endereço da linha imediatamente após a chamada de função é empurrado na pilha. Quando a função for concluída, o endereço de retorno fica retirado da pilha ea execução continua neste endereço. A pilha expande e colapsa , dependendo do número de chamadas de funções aninhadas. 
 Recursão 
 
 recursão ocorre quando uma função chama a si mesma . Considere o seguinte código: 
 
 countNodes Função (nó ) Para cada childNode em nodenodeCount + = 1countNodes ( childNode ) nextEnd função 
 
 Usando algum tipo de estrutura de árvore como um documento XML, este código de conta o número de nós de árvore encontrado em um determinado nó . Cada nó filho fica contado , então ele é passado para a mesma função para contar os seus próprios nós filho. Isso continua até que uma criança não tem filhos 
 
 Suponha que o nó programador digitado em vez de nó filho da seguinte forma: . 
 
 CountNodes Função (nó ) Para cada childNode em nodenodeCount + = 1countNodes (Node ) nextEnd 
 função 
 neste caso, a função irá chamar-se por tempo indeterminado e um estouro de pilha ocorre . 
 Invisível recursão 
 
 na maioria dos casos , os desenvolvedores não são intencionalmente escrever código recursiva , mas a recursividade pode ocorrer de maneiras mais sutis. Considere estas três funções: 
 
 loadAccount Function ( ) LoadMainAccount ( ) loadTransactions () função Fim 
 
 loadMainAccount function () loadAssociatedAccounts () função final 
 
 loadAssociatedAccounts função ( ) loadAccount ( ) end função 
 
 neste caso , a recursão ocorre indiretamente quando uma função chama outra função que, inadvertidamente, chama a primeira função . O resultado pode demorar um pouco mais , mas o resultado é um estouro de pilha . 
 Grande Parâmetros 
 
 Além rastrear pontos de retorno de chamada de função , a pilha também pode realizar outros dados . A maioria das linguagens usam a pilha para manter os parâmetros da função e estes são geralmente apenas ponteiros de endereço dos locais de parâmetros. Algumas línguas empurrar parâmetros por valor na pilha e isso pode demorar muito mais espaço. O tamanho da pilha padrão para a maioria das línguas variam de 512K para 1MB , por isso, grandes parâmetros passados por valor pode ocasionalmente causar um estouro de pilha. Se houver uma necessidade de passar grandes parâmetros por valor, consulte o manual de referência da linguagem para determinar como aumentar a pilha de variáveis. 
 Instância 
 variáveis 
 instância são aqueles embutidos dentro da função . Por exemplo : 
 
 amostra Function ( ) N = getCounter ( ) Retornar n * função 12End 
 
 A variável n é uma variável de instância , uma vez que só existe enquanto a amostra de função executa . Em muitas línguas , n é empurrado para a pilha , em seguida, bateu fora quando a função termina. Isso funciona bem para as variáveis simples, como inteiros e caracteres , mas pode encher a pilha quando grandes vetores são usados. Quando isso se torna um problema, considerar o uso de estruturas de dados embutidos, como cordas ou listas. Estas estruturas normalmente alocar memória na pilha , uma área de memória separado muito maior.