Capítulo 11: Alocação Dinâmica de Memória 🌀🔬
Neste capítulo, vamos aprender a reservar espaço na memória do computador em tempo de execução usando a Alocação Dinâmica, com o tema Portal! No C++, usamos comandos muito mais simples que no C clássico.
📖 O que é Alocação Dinâmica?
Até agora, quando criávamos um vetor (ex: int poderes[4]), o tamanho era fixo e decidido antes do programa rodar. Com a alocação dinâmica, podemos perguntar ao usuário quantos itens ele quer e criar um vetor exatamente desse tamanho enquanto o programa está rodando!
No C++, usamos os operadores new (para alocar) e delete (para liberar).
📖 Exemplo Guiado: Criando Portais de Memória
Vamos criar um vetor cujo tamanho é decidido pelo usuário.
- Crie o arquivo
portais_memoria.cppna pastasrc/:
#include <iostream>
using namespace std;
int main() {
int tamanho;
int *vetor;
cout << "Quantos portais de memoria voce deseja criar? ";
cin >> tamanho;
// Alocando memória dinamicamente em C++
vetor = new int[tamanho];
// Preenchendo o vetor
for (int i = 0; i < tamanho; i++) {
vetor[i] = (i + 1) * 10;
}
// Exibindo os valores
cout << endl << "Valores nos portais:" << endl;
for (int i = 0; i < tamanho; i++) {
cout << "Portal " << i + 1 << ": " << vetor[i] << endl;
}
// REGRA DE OURO: Sempre libere a memória alocada!
// Usamos delete[] para vetores
delete[] vetor;
cout << endl << "Memoria liberada com sucesso!" << endl;
return 0;
}🕹️ Como Executar e Testar no VS Code
- Abra o terminal integrado.
- Compile:
g++ portais_memoria.cpp -o portais_memoria - Execute:
./portais_memoria - Digite
3e pressione Enter.
Resultado Esperado:
Quantos portais de memoria voce deseja criar? 3
Valores nos portais:
Portal 1: 10
Portal 2: 20
Portal 3: 30
Memoria liberada com sucesso!📊 Ilustração Visual: Alocação de Memória
Veja como o new reserva o espaço e o delete o devolve:
graph TD A[Memória Livre] -->|"1. new"| B[Espaço Reservado para o Vetor] B -->|"2. Uso do programa"| B B -->|"3. delete[]"| A
🛠️ Prática Obrigatória 1: Registro de Cobaias
Crie um programa chamado registro_cobaias.cpp que pergunte quantas cobaias o usuário deseja cadastrar. Aloque dinamicamente um vetor de inteiros para guardar os IDs das cobaias, preencha-o com IDs digitados pelo usuário e, no final, exiba-os e libere la memória!
🔑 Gabarito de Código
Prática 1: registro_cobaias.cpp
#include <iostream>
using namespace std;
int main() {
int n;
int *ids;
cout << "Quantas cobaias deseja cadastrar? ";
cin >> n;
// Alocando
ids = new int[n];
for (int i = 0; i < n; i++) {
cout << "Digite o ID da cobaia " << i + 1 << ": ";
cin >> ids[i];
}
cout << endl << "Cobaias Cadastradas:" << endl;
for (int i = 0; i < n; i++) {
cout << "Cobaia " << i + 1 << ": ID " << ids[i] << endl;
}
// Liberando
delete[] ids;
return 0;
}📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
(Siga o padrão estabelecido no Guia)