Lidando com vazamentos de memória em laços

Por convenção, usamos os verbos "criar" e "destruir" sempre que alocação e desalocação de memória dinâmica estiverem envolvidas. É sua responsabilidade destruir o que quer que você criar antes de encerrar o seu programa. Se não fizer isso, você causará um "vazamento de memória", parecido com o da imagem abaixo:

Eis o código que gerou este aviso. Leia-o e tente identificar o erro:

Rotina para que se execute o programa:
  Carregue as bibliotecas padrão do sistema.
  Limpe a tela.
  Mostre a seta do mouse.
  Faça uma caixa 96 px por 48 px.
  Centralize a caixa sobre a tela.
  Itere.
    Desenfileire um evento.
    Se o evento for inexistente, pare.
    Se a categoria deste evento for "movimentação de cursor", 
      Execute o evento usando a caixa (exibir cursor do mouse).
    Se a categoria deste evento for "clique do botão esquerdo",
      Retorne.
  Reitere.
  Desmanche todos os eventos.
  Feche o programa.

Rotina para que se execute um evento usando uma caixa (exibir cursor do mouse):
  Atribua a cor branca a uma cor.
  Se a localização deste evento estiver na caixa, 
    Atribua a cor verde à cor.
  Pinte e preencha a caixa com a cor.
  Atualize a tela.

É um detalhe ínfimo, mas comum. Olhe para o código corrigido:

Rotina para que se execute o programa:
  Carregue as bibliotecas padrão do sistema.
  Limpe a tela.
  Mostre a seta do mouse.
  Faça uma caixa 96 px por 48 px.
  Centralize a caixa sobre a tela.
  Itere.
    Desenfileire um evento.
    Se o evento for inexistente, pare.
    Se a categoria deste evento for "movimentação de cursor", 
      Execute o evento usando a caixa (exibir cursor do mouse).
    Se a categoria deste evento for "clique do botão esquerdo",
      Pare.
  Reitere.
  Desmanche todos os eventos.
  Feche o programa.

Rotina para que se execute um evento usando uma caixa (exibir cursor do mouse):
  Atribua a cor branca a uma cor.
  Se a localização deste evento estiver na caixa, 
    Atribua a cor verde à cor.
  Pinte e preencha a caixa com a cor.
  Atualize a tela.

Perceba que a ÚNICA diferença é a linha 13, onde ao invés de "Pare", o código problemático contém a instrução "Retorne". Caso você utilize a instrução "Retorne" dentro da função Main, acabará encerrando o programa antes de efetuar a desalocação (linhas 19 e 20). Isso ocorre porque a instrução "Retorne" equivale a um "return;" de outras linguagens de programação.

Atualizado

Isto foi útil?