Documentação
  • Bem-vindo
  • Biblioteca Padrão
  • Características da linguagem
  • Comentários
  • Declaração e inicialização de variáveis
    • Inferência automática de tipos
  • Tipos de dados
    • Valores numéricos
    • Estruturas e Uniões de dados
      • Acessando os valores dos campos de estruturas
    • Strings e caracteres
      • Subtextos
      • Percorredores
    • Listas duplamente vinculadas
    • Conversão de tipos
  • Laços e Desvios condicionais
    • Lidando com vazamentos de memória em laços
  • Operadores
    • Precedência e Ordem de avaliação de operadores
  • Rotinas, Parâmetros e Funções
  • Trabalhando com Bibliotecas externas
  • Trabalhando com Instruções Hexadecimais
  • Callbacks
  • Introduzindo as palavras-chave "Preserve" e "original"
  • Usando a preposição "de"
  • Cores
  • Gráficos de Tartaruga (Turtle Graphics)
  • Algoritmos de Exemplo
    • Olá Mundo
    • A + B
    • Agenda Telefônica
    • Animação de sprites
    • Fatorial
    • 100 Portas
    • Dó Ré Mi Fá
    • API Win32 - GdipImageRotateFlip
    • Pintando como Claude Monet
    • Exemplo de interface
    • Evitando problemas de cintilação (Flickering)
    • Desenhando e pintando retângulos e caixas
    • Cofrinho Virtual
Fornecido por GitBook
Nesta página

Isto foi útil?

Editar no GitLab
  1. Laços e Desvios condicionais

Lidando com vazamentos de memória em laços

AnteriorLaços e Desvios condicionaisPróximoOperadores

Atualizado há 3 meses

Isto foi útil?

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.