Vazamento de memória

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Question book.svg
Esta página ou secção não cita fontes confiáveis e independentes, o que compromete sua credibilidade (desde abril de 2014). Por favor, adicione referências e insira-as corretamente no texto ou no rodapé. Conteúdo sem fontes poderá ser removido.
Encontre fontes: Google (notícias, livros e acadêmico)

Memory leak, ou vazamento de memória, é um fenômeno que ocorre em sistemas computacionais quando uma porção de memória, alocada para uma determinada operação, não é liberada quando não é mais necessária. A ocorrência de vazamentos de memória é quase sempre relacionada a erros de programação e pode levar a falhas no sistema se a memória for completamente consumida.

Exemplo[editar | editar código-fonte]

O exemplo abaixo, escrito na linguagem de programação C, mostra um programa de computador que possui um vazamento de memória. Após algum tempo de execução este programa irá consumir toda a memória disponível e irá falhar.

#include <stdio.h>
#include <stdlib.h>

void f(void){
    void* s;
    s = malloc(50); /* obtém a memória */
    return;  /* memory leak - ver nota abaixo */ 

    /* 
     * A [[Memória (computador)|memória]] é obtida e disponibilizada em s.
     * Após o retorno da [[subrotina|função]], o [[Ponteiro (programação)|ponteiro]] é destruído e
     * perde-se a referência a esta porção de memória.
     * 
     * Este código pode ser consertado se a função f() incluir
     * a operação "free(s)" antes do retorno ou se o código
     * que chama f() fizer a chamada para a operação free().
     */
}

int main(void){
    /* Este ''loop'' infinito chama a função f(), definida acima */
    while (1) f(); /* Cedo ou tarde a chamada à função irá falhar, devido a um
                      erro de alocação na função malloc, quando a memória terminar.*/
    return 0;
}

Outro exemplo de vazamento de memória, só que agora utilizando a linguagem de programação C++, dependendo do computador e da quantidade de memória, o programa usará 100% da memória em milésimos

int main()
{
    while(true)
    {
        int * vetor = new int[100000]; /*Em cada loop será consumido 400000 bytes(100000 * sizeof(int)) de memória ram,
                                        chegando a um ponto que não haverá mais memória*/
        //Aqui seria a parte do código trabalhando com esse vetor//
        //Para resolver o problema basta colocar um "delete vetor;" no final do loop
    }
    return 0;
}
Ícone de esboço Este artigo sobre computação é um esboço. Você pode ajudar a Wikipédia expandindo-o.