⚡ Cap 15: Alocação Dinâmica no Heap & Valgrind
Especialização em Engenharia de Sistemas com Linguagem C (C17/C23)
🗺️ Slide 1: O Ciclo de Vida do Heap
graph LR
A["1. malloc / calloc"] --> B["2. if (ptr == NULL)"]
B --> C["3. Leitura / Escrita"]
C --> D["4. free(ptr)"]
D --> E["5. ptr = NULL"]
style A fill:#d97706,stroke:#f59e0b,color:#ffffff
style B fill:#059669,stroke:#34d399,color:#ffffff
style D fill:#db2777,stroke:#f472b6,color:#ffffff
style E fill:#7c3aed,stroke:#c084fc,color:#ffffff
- Heap: Memória de gigabytes controlada manualmente.
- Toda alocação exige validação e liberação com
free().
🛠️ Slide 2: As 4 Funções Fundamentais
malloc(size): Aloca bytes brutos (contém lixo de memória).calloc(num, size): Aloca e inicializa todos os bits com zero.realloc(ptr, new_size): Redimensiona o bloco dinâmico.free(ptr): Devolve a memória ao sistema operacional.
🔒 Slide 3: Padrão Seguro de realloc
void *temp = realloc(ptr, novoTamanho);
if (temp != NULL) {
ptr = temp; // Sucesso
} else {
free(ptr); // Trata erro sem perder ponteiro original
}
- Nunca faça
ptr = realloc(ptr, ...)diretamente!
🛡️ Slide 4: Diagnóstico com Valgrind & ASan
# 1. Valgrind Memcheck
valgrind --leak-check=full ./meu_app
# 2. AddressSanitizer do GCC
gcc -fsanitize=address -g meu_app.c -o meu_app
- Detecta vazamentos de memória (Memory Leaks), Use-After-Free e Double Free.
📋 Resumo da Aula & Próximos Passos
- Revise os códigos de exemplo deste capítulo.
- Teste seus conhecimentos no Quiz Formativo.
- Pratique os exercícios em 4 níveis de complexidade.
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim