Menu
Coddy logo textTech

Liberando Memória com free()

Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 35 de 63.

Quando você aloca memória dinamicamente usando malloc(), essa memória permanece alocada até que você a libere explicitamente. A função free() é sua ferramenta para devolver ao sistema a memória alocada dinamicamente quando você terminar de usá-la.

A função free() recebe um argumento: um ponteiro para o bloco de memória que você deseja desalocar. Esse deve ser o mesmo ponteiro que foi retornado por malloc() (ou por funções relacionadas, como calloc()).

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Alocar memória
*ptr = 42;  // Usar a memória
free(ptr);  // Liberar a memória quando terminar

Não chamar free() cria o que é conhecido como vazamento de memória. A memória alocada permanece reservada pelo seu programa, mesmo que você não a esteja mais usando. Em programas de longa duração ou em programas que alocam memória repetidamente, esses vazamentos podem consumir toda a memória disponível do sistema e causar problemas de desempenho ou falhas.

Lembre-se: cada malloc() deve ter um free() correspondente. Essa correspondência é essencial para o gerenciamento responsável de memory na programação em C.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre o ciclo de vida completo da alocação e desalocação de memória dinâmica. Seu programa deve:

  1. Ler um número inteiro count do usuário, representando quantos números inteiros serão armazenados
  2. Usar malloc() com sizeof() para alocar dinamicamente memória para um array de count números inteiros
  3. Verificar se a alocação de memória foi bem-sucedida — se falhar, imprimir Memory allocation failed! e encerrar o programa
  4. Se a alocação for bem-sucedida, imprimir Memory allocated successfully!
  5. Ler count valores inteiros do usuário e armazená-los no array alocado
  6. Calcular e imprimir a soma de todos os valores no formato: Sum: [value]
  7. Encontrar e imprimir o valor máximo no formato: Maximum: [value]
  8. Usar free() para desalocar a memória
  9. Imprimir Memory freed successfully! para confirmar a limpeza

Lembre-se de incluir o cabeçalho <stdlib.h> para usar malloc() e free(). Este desafio demonstra a combinação essencial de malloc() e free() para evitar vazamentos de memória em seus programas.

Por exemplo, se a entrada for:

4
15 8 23 12

Sua saída deve ser:

Memory allocated successfully!
Sum: 58
Maximum: 23
Memory freed successfully!

Este desafio reforça o conceito fundamental de que todo bloco de memória alocado dinamicamente deve ser liberado corretamente quando não for mais necessário, completando o ciclo responsável de gerenciamento de memória na programação em C.

Experimente você mesmo

#include <stdio.h>
#include <stdlib.h>

int main() {
    int count;
    
    // Leia o número de inteiros a armazenar
    scanf("%d", &count);
    
    // TODO: Escreva seu código abaixo
    // 1. Aloque memória usando malloc() com sizeof()
    // 2. Verifique se a alocação foi bem-sucedida
    // 3. Leia os valores inteiros e armazene-os
    // 4. Calcule a soma e encontre o máximo
    // 5. Libere a memória alocada
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de C online