Vazamento de memória
# Vazamento de memória

Em ciência da computação vazamento de memória ou memory leak é um fenômeno que ocorre quando um programa de computador gerencia incorretamente alocações de memória de maneira que certa memória não é liberada quando não é mais necessária. Um vazamento de memória também pode acontecer quando um objeto é armazenado na memória mas não pode mais ser acessado pelo código em execução. Um vazamento de memória tem sintomas similares a diversos outros problemas, portanto o diagnóstico usualmente requer que o desenvolvedor tenha acesso ao código-fonte do programa.
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.
Como os vazamentos de memória podem exaurir a memória do sistema conforme a aplicação roda, eles são um frequente fator contribuinte para o envelhecimento de software.

## Efeitos

Se um programa tem vazamento de memória e seu uso aumenta de maneira estável, geralmente não haverá um sintoma imediato. Como todo sistema físico tem uma quantia finita de memória, e se o vazamento de memória não for contido (por exemplo, ao reiniciar o programa), isso irá eventualmente causar problemas.
Quando toda a memória de um sistema for exaurida (seja ela memória virtual ou apenas memória principal, como num sistema embarcado), qualquer tentativa de alocação de memória irá falhar. Isso usualmente faz o programa que tenta alocar memória terminar ou gerar uma falha de segmentação. Alguns programas são projetados para se recuperar dessa situação (possivelmente por usar memória pré-reservada como fallback).
Alguns sistemas operacionais multitarefa tem mecanismos especiais para lidar com falta de memória, como matar processos aleatoriamente (o que pode afetar processos "inocentes"), ou matar o maior processo na memória (que presumivelmente está causando o problema). Alguns sistemas operacionais tem um limite de memória por processo, para impedir qualquer
Se o vazamento de memória for no kernel, o sistema operacional provavelmente irá falhar. Computadores sem gerenciamento de memória sofisticado, como sistemas embarcados, poderá falhar completamente com um vazamento persistente de memória.
Sistemas publicamente acessíveis, como servidores web ou roteadores são suscetíveis a ataques de negação de serviço se um invasor descobrir uma sequência de operações que pode ativar um vazamento. Tal sequência é um exemplo de exploit.
Um padrão de utilização de memória "sawtooth" pode ser um indicador de um vazamento de memória dentro de uma aplicação, particularmente se uma queda vertical coincide com reinicialização do sistema ou reinicio da aplicação. Deve haver cuidado, no entanto, porque o ponto de coleta de lixo do garbage collector também podem causar tal padrão e mostraria um uso saudável da pilha.

## 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.
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