Ponteiros Nulos
Parte da seção Lógica & Fluxo do Journey de C++ da Coddy — lição 4 de 56.
Quando você declara um ponteiro, ele não aponta automaticamente para nada significativo. Um ponteiro não inicializado contém endereços de memória aleatórios, o que pode levar a erros graves se você tentar usá-lo. É aqui que os ponteiros nulos se tornam essenciais para uma programação segura.
Um ponteiro nulo é um ponteiro que aponta explicitamente para nada. No C++ moderno, você cria um ponteiro nulo inicializando-o com nullptr:
int* ptr = nullptr; // ptr agora é um ponteiro nuloA palavra-chave nullptr indica que o ponteiro não está apontando para nenhum local de memória válido. Isso é muito mais seguro do que deixar um ponteiro não inicializado, porque você pode verificar se um ponteiro é nulo antes de tentar desreferenciá-lo.
Antes de usar qualquer ponteiro, você deve verificar se ele não é nulo usando uma instrução if simples:
if (ptr != nullptr) {
// Seguro para usar *ptr aqui
int value = *ptr;
}Esta prática evita que seu programa falhe devido ao acesso a locais de memória inválidos. Sempre inicialize ponteiros como nullptr ao declará-los e verifique se são nulos antes de desreferenciar.
Desafio
FácilCrie um programa que demonstre o uso seguro de ponteiros, verificando se há ponteiros nulos antes de desreferenciá-los.
A seguinte entrada será fornecida:
- Uma string que será
"valid"ou"null"
Seu programa deve:
- Declarar uma variável inteira chamada
datae inicializá-la com o valor42 - Declarar um ponteiro chamado
ptr - Se a entrada for
"valid", atribuir o endereço dedataaptr - Se a entrada for
"null", atribuirnullptraptr - Usar uma instrução if para verificar se
ptrnão é nulo antes de tentar usá-lo - Se o ponteiro não for nulo, imprimir o valor para o qual ele aponta
- Se o ponteiro for nulo, imprimir uma mensagem de segurança
Use o seguinte formato de saída exato:
Value: [value]Para ponteiros nulos, use este formato:
Pointer is null - cannot dereferenceFolha de consulta
Inicialize ponteiros como nullptr para evitar comportamento indefinido:
int* ptr = nullptr; // ptr agora é um ponteiro nuloSempre verifique se um ponteiro não é nulo antes de desreferenciar:
if (ptr != nullptr) {
// Seguro para usar *ptr aqui
int value = *ptr;
}A palavra-chave nullptr indica explicitamente que o ponteiro não está apontando para nenhum local de memória válido, tornando seu código mais seguro e evitando falhas ao acessar memória inválida.
Experimente você mesmo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Ler a entrada
string input;
cin >> input;
// Declarar 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 para ptr
// - Use a instrução if 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 Tarefa