Menu
Coddy logo textTech

Verificando Falhas de Alocação

Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 34 de 63.

Embora malloc() seja uma ferramenta poderosa para alocação dinâmica de memória, há uma realidade crítica que você precisa entender: malloc() pode falhar. Quando o sistema fica sem memória disponível, malloc() não consegue atender à sua solicitação e retorna NULL em vez de um endereço de memória válido.

Isso significa que, sempre que você usar malloc(), deverá verificar se ele foi bem-sucedido antes de tentar usar o ponteiro retornado. Usar um ponteiro NULL fará com que seu programa trave com uma falha de segmentação.

int *ptr = (int*)malloc(sizeof(int));

if (ptr == NULL) {
    printf("Memory allocation failed!\n");
    return -1;  // Saia do programa ou trate o erro
}

// Seguro usar ptr aqui
*ptr = 42;

Essa verificação de NULL não é opcional — é essencial para escrever programas C robustos. Mesmo que falhas na alocação de memória sejam raras em sistemas modernos, elas podem acontecer, especialmente em ambientes com recursos limitados ou ao solicitar grandes quantidades de memória. O código C profissional sempre inclui essas verificações para evitar falhas e proporcionar um tratamento de erros adequado.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre o tratamento adequado de error ao usar malloc() para allocation dinâmica de Memory. Seu programa deve:

  1. Ler um integer n do usuário representando o number de integers a serem armazenados
  2. Usar malloc() com sizeof() para alocar dinamicamente memory para um array de n integers
  3. Verificar se a Memory allocation foi successful, testando se o ponteiro retornado é NULL
  4. Se a allocation falhar, imprimir Memory allocation failed! e encerrar o program
  5. Se a allocation for bem-sucedida, imprimir Memory allocation successful!
  6. Ler n valores integer do usuário e armazená-los no array alocado
  7. Calcular e imprimir a soma de todos os valores no formato: Sum: [value]
  8. Imprimir o total de bytes alocados no formato: Bytes allocated: [value]

Lembre-se de incluir o cabeçalho <stdlib.h> para usar malloc(). Seu programa deve demonstrar a prática essencial de verificar se houve failure de allocation antes de tentar usar a Memory alocada.

Por exemplo, se a entrada for:

4
10 20 30 40

A saída deve ser:

Memory allocation successful!
Sum: 100
Bytes allocated: 16

Este desafio enfatiza a importância crítica da programação defensiva ao trabalhar com Memory allocation dinâmica, garantindo que seus programas lidem adequadamente com possíveis Memory allocation failures, em vez de falharem inesperadamente.

Experimente você mesmo

#include <stdio.h>
#include <stdlib.h>

int main() {
    // Leia o número de inteiros
    int n;
    scanf("%d", &n);
    
    // TODO: Escreva seu código aqui
    // - Use malloc() para alocar memória para n inteiros
    // - Verifique se a alocação foi bem-sucedida
    // - Trate tanto os casos de sucesso quanto de falha
    // - Leia os inteiros e armazene-os
    // - Calculate the sum and bytes allocated
    
    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 e Fluxo

Pratique por conta própria: Compilador de C online