Ponteiros Nulos
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy. Lição 4 de 56.
Quando você declara um pointer, ele não aponta automaticamente para nada significativo. Um pointer não inicializado contém endereços de memória aleatórios, o que pode causar erros graves se você tentar usá-lo. É nesse ponto que os null pointers se tornam essenciais para uma programação segura.
Um null pointer é um pointer que aponta explicitamente para nada. No C++ moderno, você cria um null pointer inicializando-o com nullptr:
int* ptr = nullptr; // ptr agora é um ponteiro nuloA palavra-chave nullptr indica que o ponteiro não aponta para nenhum local de memória válido. Isso é muito mais seguro do que deixar um ponteiro não inicializado, pois você pode verificar se um ponteiro é nulo antes de tentar desreferenciá-lo.
Antes de usar qualquer pointer, você deve verificar se ele não é null usando uma instrução if simples:
if (ptr != nullptr) {
// É seguro usar *ptr aqui
int value = *ptr;
}Esta prática evita que seu programa trave devido ao acesso a locais de memória inválidos. Sempre inicialize os pointer com nullptr quando você os declarar e faça o check de null antes de fazer dereference.
Desafio
FácilCrie um programa que demonstre o uso seguro de pointer verificando se há pointers null antes de fazer a dereference deles.
A seguinte entrada será fornecida:
- Uma string que será
"valid"ou"null"
Seu programa deve:
- Declare uma variável inteira chamada
datae inicialize-a com o valor42 - Declare um pointer chamado
ptr - Se a entrada for
"valid", assign o endereço dedataaptr - Se a entrada for
"null", assignnullptraptr - Use uma if-statement para check se
ptrnão é null antes de tentar usá-lo - Se o pointer não for null, imprima o valor para o qual ele aponta
- Se o pointer for null, imprima uma mensagem de segurança
Use o seguinte formato exato de saída:
Value: [value]Para pointers null, use este formato:
Pointer is null - cannot dereferenceExperimente você mesmo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Ler entrada
string input;
cin >> input;
// Declare a variável data
int data = 42;
// TODO: Escreva seu código aqui
// - Declare um ponteiro chamado ptr
// - Verifique a entrada e atribua o valor apropriado a ptr
// - Use if-statement para verificar e usar o ponteiro com segurança
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 TarefaPratique por conta própria: Compilador de C++ online