Programação  
 
Conhecimento computador >> Programação >> Programação De Computador Idiomas >> 
O que é Stack Overflow na Linha 42
? 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.

Anterior :

Próximo : No
  Os artigos relacionados
·Como usar o MATLAB para resolver um problema de program…
·As vantagens de um editor premium 
·Como calcular o THD em MATLAB 
·Como fazer Pelúcia Animais em SolidWorks 
·Dados Gridview Tipo de célula mista 
·Como enviar um SMS no Android API 
·Funções Scala de corda 
·A função Low Pass em MATLAB 
·O que é uma conversão Maildir 
·Funções de erro Fortran 
  Artigos em destaque
·O uso de um padrão Construtor C 
·Como ler um arquivo de caixa de listagem em C # 
·Como remover um botão usando RemoveChild em AS3 
·Diferença entre determinísticas e não determinístic…
·Como usar a função strncpy em C + + 
·Como reduzir tamanho do arquivo em XNA 
·Como encontrar um vazamento de memória no Linux 
·Como corrigir o GCC Aviso declaração implícita de Fu…
·Como fazer uma GUI em C 
·Como fazer um SWF a partir de C + + 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados