Cómo comprobar si el puntero es nulo en C++

Jinku Hu 12 octubre 2023
  1. Comparar con nullptr para comprobar si el puntero es NULL en C++
  2. Usa la comparación con 0 para comprobar si el puntero es NULL en C++
  3. Usar el valor del puntero como condición para comprobar si el puntero es NULL en C++
Cómo comprobar si el puntero es nulo en C++

Este artículo demostrará múltiples métodos sobre cómo comprobar si un puntero es nulo en C++.

Comparar con nullptr para comprobar si el puntero es NULL en C++

El lenguaje C++ proporciona múltiples características de bajo nivel para manipular la memoria directamente y especifica el concepto de “puntero”, que es el objeto que apunta a una dirección de memoria. Normalmente, un puntero debe apuntar a algún objeto que sea utilizado por el programa de ejecución. Aunque, también podemos declarar un puntero como un puntero nulo que no apunta a ningún objeto.

Un puntero nulo se inicializa asignando el valor literal nullptr o con el entero 0. Note, sin embargo, que el C++ moderno sugiere evitar la inicialización 0 de los punteros porque puede conducir a resultados indeseados cuando se usan funciones sobrecargadas. En el siguiente ejemplo, comprobamos si el puntero no es igual a un nullptr, y si la condición se cumple, podemos operar sobre él.

#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!

Usa la comparación con 0 para comprobar si el puntero es NULL en C++

También hay una variable del preprocesador llamada NULL, que tiene sus raíces en la biblioteca estándar de C y se utiliza a menudo en el código heredado. Tenga en cuenta que no se recomienda utilizar NULL en la programación contemporánea de C++ porque equivale a la inicialización por el entero 0, y los problemas pueden surgir como se ha indicado en la sección anterior. Aún así, podemos comprobar si un puntero es nulo comparándolo con 0 como se demuestra en el siguiente ejemplo 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!

Usar el valor del puntero como condición para comprobar si el puntero es NULL en C++

Los punteros nulos se evalúan como false cuando se usan en expresiones lógicas. Así, podemos poner un puntero dado en la condición de if para comprobar si es un nulo. Nótese que la derivación de punteros nulos lleva a un comportamiento indefinido, lo que causa que un programa termine anormalmente en la mayoría de los 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

Artículo relacionado - C++ Pointer