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 trave 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", atribua o endereço dedataaptr - Se a entrada for
"null", atribuanullptraptr - Use uma instrução if para verificar se
ptrnão é nulo antes de tentar usá-lo - Se o ponteiro não for nulo, imprima o valor para o qual ele aponta
- Se o ponteiro for nulo, imprima 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 dereferenceExperimente você mesmo
#include <iostream>
#include <string>
using namespace std;
int main() {
// Ler a entrada
string input;
cin >> input;
// Declarar a variável de dados
int data = 42;
// TODO: Escreva seu código aqui
// - Declarar um ponteiro chamado ptr
// - Verificar a entrada e atribuir o valor apropriado ao ptr
// - Usar uma 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