0Pricing
C++ Academy · Lección

nullptr y seguridad frente a punteros nulos

Use nullptr en lugar de NULL o 0 y evite las desreferenciaciones de punteros nulos.

nullptr y seguridad frente a punteros nulos es una lección gratuita de C++ Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C++ Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué es un puntero nulo?

Un puntero nulo es un valor especial que no apunta a «nada». Desreferenciarlo tiene un comportamiento indefinido y normalmente provoca un error de segmentación.

nullptr en el C++ moderno

Desde C++11, la palabra clave nullptr representa un literal de puntero nulo con tipo. Prefiérala a NULL o 0.

int* p1 = nullptr;
int* p2 = NULL;       // legacy macro
int* p3 = 0;          // legacy literal

¿Por qué nullptr?

NULL es simplemente una macro para 0. Puede confundir la resolución de sobrecargas entre int e int*. nullptr tiene el tipo único std::nullptr_t.

void f(int);
void f(int*);

f(NULL);      // calls f(int) -- surprising!
f(nullptr);   // calls f(int*) -- correct

Comprobación de valores nulos

Los punteros se convierten implícitamente a bool: un puntero no nulo es verdadero y uno nulo es falso.

if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";

Inicialice siempre

Los punteros no inicializados contienen valores basura y parecen apuntar a alguna ubicación. Inicialícelos siempre, aunque solo sea con nullptr.

int* p;            // BAD: undefined contents
int* q = nullptr;  // GOOD

Desreferenciación de punteros nulos

Leer o escribir a través de un puntero nulo tiene un comportamiento indefinido. En la mayoría de los sistemas de escritorio provoca un error de segmentación. En dispositivos integrados puede corromper la memoria silenciosamente.

Comprobaciones defensivas

Compruebe el puntero antes de desreferenciarlo en las API públicas o cuando el llamador pueda pasar un valor nulo.

void process(int* data) {
    if (!data) return;
    *data *= 2;
}

Referencias en lugar de punteros

Si el valor nulo nunca es válido, utilice un parámetro de referencia. El compilador garantiza que la referencia esté vinculada a un objeto.

// Before
void f(Widget* w);   // can be null?

// After
void f(Widget& w);   // must be a real widget

std::optional para valores opcionales

C++17 añadió std::optional<T> para expresar «quizá haya un valor», lo que resulta más claro que un puntero anulable cuando no se trata de asignación dinámica.

#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;

Punteros inteligentes y valores nulos

std::unique_ptr y std::shared_ptr también pueden ser nulos. Se convierten a bool para realizar comprobaciones y se restablecen con = nullptr.

Error habitual: puntero colgante después de delete

Después de delete p, el puntero todavía contiene la dirección anterior. Restablézcalo: p = nullptr;. Los punteros inteligentes lo hacen automáticamente.

Comprobación rápida

¿Qué literal de puntero nulo debe utilizar en el C++ moderno?

Resumen

Utilice nullptr para los valores de puntero nulo. Inicialice siempre los punteros. Compruebe el puntero antes de desreferenciarlo o, mejor aún, utilice referencias y std::optional cuando el valor nulo nunca sea válido.

Preguntas frecuentes

¿La lección «nullptr y seguridad frente a punteros nulos» es gratis?

Sí — el texto completo de «nullptr y seguridad frente a punteros nulos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C++ Academy, actualiza a CoddyKit PRO. El curso de C++ Academy incluye 4 lecciones en total.

¿Qué aprenderé en «nullptr y seguridad frente a punteros nulos»?

Use nullptr en lugar de NULL o 0 y evite las desreferenciaciones de punteros nulos. Practicas C++ Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C++ Academy?

No se requiere experiencia previa. C++ Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «nullptr y seguridad frente a punteros nulos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C++ Academy?

Sí. Cada lección de C++ Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Punteros sin formato y operador de dirección
  2. Desreferenciación y aritmética de punteros
  3. nullptr y seguridad frente a punteros nulos
  4. Cuándo usar punteros frente a referencias
← Volver a C++ Academy