Vazamento de memória em C, C ++; esqueceu de fazer grátis, delete

Alocamos memória em C usando malloc e em C ++ usando new. Eu sei que a memória alocada deve ser liberada ou devolvida ao sistema operacional usando free em C e delete em C ++. Se eu esquecer de usar o comando free / delete depois de alocar memória, isso significa que haverá vazamento de memória.

Agora, minha pergunta é, é esse vazamento de memória somente durante o período de tempo de execução do programa; ou é vazamento / perda permanente ou é ganho novamente quando eu reiniciar o sistema? Qual é o processo interno, na verdade? O que significa vazamento / perda de memória exatamente?

Eu ficaria muito grato se alguém pudesse explicar isso em detalhes ou me fornecer algumas boas referências.

ATUALIZAÇÃO 1

Depois de ler algumas respostas, aprendi que a memória é devolvida ao sistema operacional após o término do programa, e se é por isso que todo mundo precisa se preocupar tanto com vazamento de memória, e por que evitar vazamento de memória é muito importante?

ATUALIZAÇÃO 2

Então, vazamento de memória deve ser evitado para que o sistema não trave devido à falta de memória suficiente para fins de alocação ??

ATUALIZAÇÃO 3

Então, depois de ler todas as respostas, percebi que vazamento de memória é quieto questões importantes para evitar falhas no sistema. Mas, para um iniciante como eu, como posso ter certeza se meu programa está completamente livre de vazamento de memória. Eu tento fazer de graça, delete se estou usando malloc, novo, mas às vezes, fica confuso. Existe alguma ferramenta ou método que eu possa usar para saber se o meu programa está fazendo algum vazamento de memória?

ATUALIZAÇÃO 4

Depois de ler as respostas, eu já entendi a importância do código livre de vazamento de memória, menos uso de novo / excluir, mais uso de STL, aprendi coisas novas como RAII, valgrind e boas práticas de programação. Obrigado a todos :)

questionAnswers(18)

yourAnswerToTheQuestion