Programação  
 
Conhecimento computador >> Programação >> C /C + + programação >> 
Como prevenir vazamentos de memória em C + +
Um vazamento de memória é um tipo de programação bug que ocorre quando um programa aloca mais memória do que ele libera . Desta forma , um aplicativo pode ficar sem memória e fazer com que o sistema deixe de funcionar. Para evitar vazamentos de memória , você precisa saber quando eles ocorrem com mais frequência e ser consciente com o uso dos operadores de C + + "novo" e "delete" . Coisas que você precisa
Proficiência em C + + compilador
C + +
depurador e outras ferramentas de software de investigação
Show Mais instruções
1

Entenda o básico do operador. O operador C + + "novo" aloca memória heap. O operador "delete" libera memória heap. Para cada " novo", você deve usar um "delete " para que você liberar a mesma memória que você alocado : .
Char * str = new char [ 30] //Alocar 30 bytes para abrigar uma string
delete [ ] str //Limpar esses 30 bytes e fazer ponto str lugar nenhum
2

realocar a memória somente se você tiver excluído . . No código abaixo , str adquire um novo endereço com a segunda alocação. O primeiro endereço é perdido irremediavelmente , e por isso são os 30 bytes que apontavam para . Agora, eles são impossíveis de livre , e você tem um vazamento de memória : .
Char * str = new char [ 30] //Dê str um endereço de memória
//delete [ ] str; //Remove a primeira marcação comentário nesta linha para corrigir
str = new char [ 60] ; /.. /Dê str outro endereço de memória com o primeiro foi para sempre
delete [ ] str //isso exclui o 60 bytes , e não apenas os primeiros 30 .
3

Assista as atribuições do ponteiro. Cada variável dinâmica ( memória alocada no heap) precisa ser associado com um ponteiro. Quando uma variável dinâmica torna-se dissociado de seu ponteiro (s), torna-se impossível de apagar. Mais uma vez , isso resulta em um vazamento de memória :
char * str1 = new char [ 30];
char * str2 = new char [ 40] ;
strcpy ( str1 , " vazamento de memória" ) ;
str2 = str1 //Bad ! Agora, os 40 bytes são impossíveis de livre
delete [ ] str2 ; . //Isso elimina os 30 bytes
delete [ ] str1 ; . Violação //acesso possível . Que desastre !
4

Tenha cuidado com ponteiros locais. Um ponteiro de declarar em uma função é alocada na pilha , mas a variável dinâmica que aponta para é alocado no heap. Se você não apagá-lo, ele irá persistir após o programa sai da função:
vazio Leak (int x ) {
char * p = new char [ x] ;
//delete [ ] p //Remova a primeira marcação para corrigir comentário
}
5

Preste atenção aos colchetes depois . "delete ". Use "delete" , por si só para libertar um único objeto. Use "delete" [] com colchetes para libertar uma matriz heap. Não faça algo assim:
char * um = new char ;
delete [ ] um; //errado
char * muitos = new char [ 30];
excluir muitos ; ! //errado

Anterior :

Próximo : No
  Os artigos relacionados
·Como desenhar um String, quadrado, retângulo, círculo…
·Como alterar AppDelegate em um iPhone 
·Como obter a Perspectiva C em Eclipse 
·Como criar sua própria Game Engine 
·Como usar Cout e Cin em OpenGL 
·Adicionando um DLL a um projeto CPP 
·Substrings comuns em C 
·Como escrever um fluxo de entrada em um fluxo de saída…
·Como parar C saturações de buffer 
·Como usar Arrays de caracteres Two- Dimensional em C 
  Artigos em destaque
·Como instalar o Allegro Visual C 
·Como declarar uma matriz de estruturas em C 
·Função recursiva em C 
·Como usar um Date Picker básico Com GridView 
·Como excluir um botão na Visual C 
·Como corrigir falha Visual C Afirmação 
·Tipos de Dados ANSI C 
·Como fazer um retângulo com uma função recursiva em …
·Como inserir um atraso em segundos para C + + 
·O Projeto sem fio AVR 
Cop e direita © Conhecimento computador http://ptcomputador.com Todos os Direitos Reservados