Menu
Coddy logo textTech

Alocação Dinâmica - malloc()

Parte da seção Lógica e Fluxo 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 "alocação de memória" e permite alocar memória dinamicamente quando você precisa dela, em vez de declarar variáveis de tamanho fixo no momento da compilação.

A função malloc() aceita 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 retorna um ponteiro void, você pode atribuí-lo diretamente a um ponteiro tipado; a conversão de tipo é opcional em C (ao contrário de C++, que exige isso).

#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 armazenar um inteiro

A principal vantagem de 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(); converter explicitamente o ponteiro void retornado é opcional em C, pois ele é convertido automaticamente para o tipo ao qual você o atribui.

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 no heap. Seu programa deve:

  1. Usar malloc() para alocar dinamicamente memória para um inteiro
  2. Converter o ponteiro void retornado em um ponteiro para 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 desreferenciação
  5. Imprimir o valor armazenado no formato: Stored value: [value]
  6. Calcular e armazenar o quadrado do valor no mesmo local da memória
  7. Imprimir o valor elevado 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 do heap, usá-la para armazenar e manipular dados e trabalhar com a memória alocada por meio de operações com ponteiros.

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

Stored value: 7
Squared value: 49

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

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. Faça o cast do 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. Print the squared value
    
    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