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.

  1. Crie o arquivo portais_memoria.cpp na pasta src/:
#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

  1. Abra o terminal integrado.
  2. Compile: g++ portais_memoria.cpp -o portais_memoria
  3. Execute: ./portais_memoria
  4. Digite 3 e 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)


Capitulo Anterior | Proximo Capitulo