Menu
Coddy logo textTech

Memória Dinâmica com 'new'

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 6 de 56.

Até agora, você trabalhou com ponteiros que apontam para variáveis já criadas em seu programa. Mas e se você precisar criar variáveis enquanto seu programa está em execução? É aqui que a alocação dinâmica de memória com a palavra-chave new torna-se essencial.

A palavra-chave new permite que você aloque memória para uma variável no heap durante a execução do programa. Ao contrário de variáveis comuns que são criadas na stack, a memória alocada dinamicamente persiste até que você a libere explicitamente.

int* ptr = new int;  // Aloca memória para um inteiro
*ptr = 42;           // Atribui um valor à memória alocada

Neste exemplo, new int aloca memória suficiente para armazenar um inteiro e retorna um ponteiro para esse local da memória. Você pode então usar o operador de desreferência para atribuir valores e acessar a variável alocada dinamicamente como qualquer outro ponteiro.

A alocação dinâmica de memória é particularmente útil quando você não sabe de quanta memória precisará até o tempo de execução, ou quando você precisa que as variáveis existam além do escopo onde foram criadas. Essa flexibilidade torna o new uma ferramenta poderosa para construir programas mais complexos.

challenge icon

Desafio

Fácil

Crie um programa que demonstre a alocação dinâmica de memória usando a palavra-chave new para alocar memória para uma variável durante a execução do programa.

A seguinte entrada será fornecida:

  • Um valor inteiro para armazenar na memória alocada dinamicamente

Seu programa deve:

  1. Usar a palavra-chave new para alocar memória dinamicamente para um inteiro
  2. Armazenar o ponteiro retornado por new em uma variável de ponteiro chamada numPtr
  3. Usar o operador de desreferência para atribuir o valor de entrada à memória alocada dinamicamente
  4. Imprimir o valor armazenado na memória alocada dinamicamente desreferenciando o ponteiro
  5. Imprimir o endereço de memória armazenado no ponteiro

Use o seguinte formato de saída exato:

Value: [value]
Address: [memory address]

O endereço de memória será exibido em formato hexadecimal, que é como o C++ mostra endereços de memória para memória alocada dinamicamente.

Folha de consulta

A palavra-chave new aloca memória para uma variável no heap durante a execução do programa:

int* ptr = new int;  // Aloca memória para um inteiro
*ptr = 42;           // Atribui um valor à memória alocada

Ao contrário das variáveis comuns criadas na stack, a memória alocada dinamicamente persiste até ser explicitamente liberada e pode existir além do escopo onde foi criada.

Experimente você mesmo

#include <iostream>
using namespace std;

int main() {
    // Ler a entrada
    int value;
    cin >> value;
    
    // TODO: Escreva seu código abaixo
    // Use 'new' para alocar memória dinamicamente para um inteiro
    // Armazene o ponteiro em uma variável chamada 'numPtr'
    // Atribua o valor de entrada à memória alocada dinamicamente
    
    // Exibir o resultado
    cout << "Value: " << /* desreferencie numPtr aqui */ << endl;
    cout << "Address: " << /* imprima o endereço armazenado em numPtr */ << endl;
    
    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 & Fluxo