Vazamento de memória: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
EmausBot (discussão | contribs)
m r2.7.2+) (Robô: A adicionar: uk:Витік пам'яті
KLBot2 (discussão | contribs)
m Bot: A migrar 23 interwikis, agora providenciados por Wikidata em d:Q751740
Linha 32: Linha 32:


[[Categoria:Depuração]]
[[Categoria:Depuração]]

[[ar:تسرب الذاكرة]]
[[cs:Únik paměti]]
[[de:Speicherleck]]
[[en:Memory leak]]
[[es:Fuga de memoria]]
[[fa:کمبود حافظه]]
[[fi:Muistivuoto]]
[[fr:Fuite de mémoire]]
[[he:דליפת זיכרון]]
[[id:Kebocoran Memori]]
[[it:Memory leak]]
[[ja:メモリリーク]]
[[ko:메모리 누수]]
[[lt:Atminties nutekėjimas]]
[[ms:Bocor ingatan]]
[[nl:Geheugenlek]]
[[pl:Wyciek pamięci]]
[[ru:Утечка памяти]]
[[sk:Memory leak]]
[[tr:Bellek sızıntısı]]
[[uk:Витік пам'яті]]
[[zh:内存泄漏]]
[[zh-yue:漏記憶]]

Revisão das 03h29min de 28 de março de 2013

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

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 à um
                      um erro de alocação na função malloc, quando a memória terminar.*/
    return 0;
}