Verificar se o ponteiro é NULL em C++

Jinku Hu 12 outubro 2023
  1. Comparar com nullptr para verificar se o ponteiro é NULL em C++
  2. Utilizar comparação com 0 para verificar se o ponteiro é NULL em C++
  3. Utilize o valor do ponteiro como condição para verificar se o ponteiro é NULL em C++
Verificar se o ponteiro é NULL em C++

Este artigo irá demonstrar múltiplos métodos de como verificar se um ponteiro é nulo em C++.

Comparar com nullptr para verificar se o ponteiro é NULL em C++

A linguagem C++ fornece múltiplas características de baixo nível para manipular directamente a memória e especifica o conceito de ponteiro, que é o objecto que aponta para um endereço de memória. Normalmente, um ponteiro deve apontar para algum objecto que é utilizado pelo programa de execução. Embora, podemos também declarar um ponteiro como um ponteiro nulo que não aponta para nenhum objecto.

Um ponteiro nulo é inicializado através da atribuição do valor literal nullptr ou com o inteiro 0. Note-se, contudo, que o C++ moderno sugere evitar 0 inicialização de apontadores porque pode levar a resultados indesejados quando se utilizam funções sobrecarregadas. No exemplo seguinte, verificamos se o ponteiro não é igual a um nullptr, e se a condição for satisfeita, podemos operar sobre ele.

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr != nullptr) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

Resultado:

Valid pointer!

Utilizar comparação com 0 para verificar se o ponteiro é NULL em C++

Existe também uma variável pré-processadora chamada NULL, que tem raízes na biblioteca padrão C e é frequentemente utilizada em código antigo. Lembre-se que não é recomendado utilizar NULL na programação contemporânea em C++ porque é equivalente à inicialização pelo inteiro 0, e os problemas podem surgir como indicado na secção anterior. Ainda assim, podemos verificar se um ponteiro é nulo, comparando-o com 0, como demonstrado na próxima amostra de código:

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr != 0) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

Resultado:

Valid pointer!

Utilize o valor do ponteiro como condição para verificar se o ponteiro é NULL em C++

Os apontadores nulos são avaliados como falsos quando são utilizados em expressões lógicas. Assim, podemos colocar um determinado ponteiro na condição de declaração if para verificar se é um nulo. Note-se que o desreferenciamento de apontadores nulos leva a um comportamento indefinido, o que faz com que um programa termine de forma anormal na maioria dos casos.

#include <iostream>

using std::cout;
using std::endl;

#define SIZE 123

int main() {
  char *arr = (char *)malloc(SIZE);

  if (arr) {
    cout << "Valid pointer!" << endl;
  } else {
    cout << "NULL pointer!" << endl;
  }

  free(arr);
  return EXIT_SUCCESS;
}

Resultado:

Valid pointer!
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Artigo relacionado - C++ Pointer