Menu
Coddy logo textTech

Alocação Dinâmica - malloc()

Parte da seção Logic & Flow do Journey de C da Coddy — lição 32 de 63.

Agora você aprenderá sobre malloc(), a principal função para solicitar memória do heap durante a execução do programa. A função malloc() significa "memory allocation" e permite que você aloque memória dinamicamente quando precisar, em vez de declarar variáveis de tamanho fixo em tempo de compilação.

A função malloc() recebe um argumento: o número de bytes que você deseja alocar. Ela retorna um ponteiro void para o bloco de memória alocado, ou NULL se a alocação falhar. Como ela retorna um ponteiro void, você deve realizar o cast para o tipo de dado apropriado.

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Aloca memória para um inteiro
// ptr agora aponta para um local de memória que pode conter um inteiro

A principal vantagem do malloc() é a flexibilidade - você pode solicitar exatamente a quantidade de memória necessária em tempo de execução, e essa memória permanece disponível até que você a libere explicitamente. Isso é particularmente útil quando você não sabe de quanta memória precisará até que seu programa esteja em execução.

Lembre-se de incluir <stdlib.h> para usar malloc(), e sempre realize o cast do ponteiro void retornado para corresponder ao tipo de dado com o qual você está trabalhando.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre a alocação dinâmica de memória usando malloc() para criar e trabalhar com um único inteiro na heap. Seu programa deve:

  1. Usar malloc() para alocar memória dinamicamente para um inteiro
  2. Converter (cast) o ponteiro void retornado para um ponteiro de inteiro
  3. Ler um valor inteiro da entrada do usuário
  4. Armazenar o valor de entrada na memória alocada dinamicamente usando o operador de desreferência
  5. Imprimir o valor armazenado no formato: Stored value: [value]
  6. Calcular e armazenar o quadrado do valor no mesmo local de memória
  7. Imprimir o valor ao quadrado no formato: Squared value: [value]

Lembre-se de incluir o cabeçalho <stdlib.h> para usar malloc(). Seu programa deve demonstrar o fluxo de trabalho básico da alocação dinâmica de memória: solicitar memória da heap, usá-la para armazenar e manipular dados, e trabalhar com a memória alocada por meio de operações de ponteiro.

Por exemplo, se o usuário inserir 7, sua saída deve ser:

Stored value: 7
Squared value: 49

Este desafio apresenta o conceito fundamental de alocação dinâmica de memória, onde a memória é solicitada em tempo de execução em vez de ser fixa em tempo de compilação, dando aos seus programas maior flexibilidade no uso da memória.

Folha de consulta

A função malloc() aloca memória dinamicamente do heap durante a execução do programa. Ela recebe o número de bytes a serem alocados e retorna um ponteiro void para o bloco de memória alocado, ou NULL se a alocação falhar.

Inclua <stdlib.h> para usar malloc():

#include <stdlib.h>

int *ptr = (int*)malloc(sizeof(int));  // Aloca memória para um inteiro

Pontos-chave:

  • Sempre faça o cast do ponteiro void retornado para o tipo de dado apropriado
  • A memória permanece disponível até ser explicitamente liberada
  • Oferece flexibilidade para solicitar quantidades exatas de memória em tempo de execução
  • Use sizeof() para determinar o número correto de bytes necessários

Experimente você mesmo

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

int main() {
    // Ler entrada
    int input_value;
    scanf("%d", &input_value);
    
    // TODO: Escreva seu código abaixo
    // 1. Use malloc() para alocar memória para um inteiro
    // 2. Converta o ponteiro retornado para int*
    // 3. Armazene o valor de entrada na memória alocada
    // 4. Imprima o valor armazenado
    // 5. Calcule e armazene o quadrado no mesmo local
    // 6. Imprima o valor ao quadrado
    
    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 Logic & Flow