Como evitar vazamentos de memória em c ++

Um vazamento de memória é um tipo de bug de programação que ocorre quando um programa aloca mais memória do que ele libera. Desta forma, um aplicativo pode ficar sem memória e causar a falha do sistema. Para evitar vazamentos de memória, você precisa saber quando eles ocorrem com mais frequência e ser consciente com o uso do "Novo" e "excluir" operadores C ++.

Coisas que você precisa

  • Proficiência em C ++
  • compilador C ++
  • Depurador e outras ferramentas de software de investigação

instruções

  1. Compreender os conceitos básicos do operador. O operador do C ++ "Novo" aloca memória heap. o "excluir" operador libera memória heap. Para cada "Novo," você deve usar um "excluir" de modo 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 str apontar a 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 dotaçã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 nesta linha para corrigir comentários.

    str = new char [60] - // dê str outro endereço de memória com o primeiro foi para sempre.

    delete [] STR-// Isso exclui os 60 bytes, não apenas o primeiro 30.



  3. Cuidado com os trabalhos de 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 do seu ponteiro (s), torna-se impossível de apagar. Mais uma vez, isto resulta em uma perda de memória:

    carbonizar str1 = new char [30] -

    carbonizar
    str2 = new char [40] -

    strcpy (str1, "Vazamento de memória") -

    str2 = str1- // Bad! Agora, os 40 bytes são impossíveis de se libertar.

    delete [] str2- // Isso exclui os 30 bytes.

    delete [] str1- // Possível violação de acesso. Que desastre!

  4. Tenha cuidado com ponteiros locais. Um ponteiro você declarar em uma função é alocada na pilha, mas a variável dinâmica ele aponta para é alocado na pilha. Se você não excluí-lo, ele irá persistir após o programa sai da função:

    anular Leak (int x) {

    char * p = new char [x] -

    // Delete [] p // Remove a primeira marcação para corrigir comentários.

    }

  5. Preste atenção aos colchetes após "excluir." Usar "excluir" por si só, para libertar um único objeto. Usar "excluir" [] Com colchetes para libertar uma matriz de heap. Não faça algo parecido com isto:

    carbonizar um = new char-

    delete [] um- // errado

    carbonizar
    muitos = new char [30] -

    eliminar muitos-// errado!

dicas & avisos

  • Evite misturar C e C ++. Use o novo e excluir ou usar malloc () e free (). Sob nenhuma circunstância usar nova com free () ou malloc () com delete.

recursos

De esta maneira? Compartilhar em redes sociais:

LiveInternet