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 alocadaNeste 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.
Desafio
FácilCrie 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:
- Usar a palavra-chave
newpara alocar memória dinamicamente para um inteiro - Armazenar o ponteiro retornado por
newem uma variável de ponteiro chamadanumPtr - Usar o operador de desreferência para atribuir o valor de entrada à memória alocada dinamicamente
- Imprimir o valor armazenado na memória alocada dinamicamente desreferenciando o ponteiro
- 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 alocadaAo 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;
}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
1Ponteiros e Memória
O que é um Ponteiro?Operador de EndereçoOperador de DesreferenciaçãoPonteiros NulosPonteiros e ArraysMemória Dinâmica com 'new'Liberando Memória com 'delete'Recapitulação - Prática com Ponteiros2Vetores (Arrays Dinâmicos)
Introdução ao std::vectorCriando um VetorAdicionando ElementosAcessando ElementosTamanho do VetorIterando com um Loop ForLoop For Baseado em IntervaloRemovendo ElementosRecapitulação - Operações com Vetores3Projeto: Ferramenta de Lista de Tarefas
Visão Geral do ProjetoAdicionando uma Tarefa