Menu
Coddy logo textTech

Punteros nulos

Parte de la sección Lógica y Flujo del Journey de C++ de Coddy — lección 4 de 56.

Cuando declaras un puntero, este no apunta automáticamente a nada significativo. Un puntero no inicializado contiene direcciones de memoria aleatorias, lo que puede provocar errores graves si intentas usarlo. Aquí es donde los punteros nulos se vuelven esenciales para una programación segura.

Un puntero nulo es un puntero que apunta explícitamente a nada. En C++ moderno, se crea un puntero nulo inicializándolo con nullptr:

int* ptr = nullptr;  // ptr es ahora un puntero nulo

La palabra clave nullptr indica que el puntero no está apuntando a ninguna ubicación de memoria válida. Esto es mucho más seguro que dejar un puntero sin inicializar, porque puedes comprobar si un puntero es nulo antes de intentar desreferenciarlo.

Antes de usar cualquier puntero, debe verificar que no sea nulo mediante una simple sentencia if:

if (ptr != nullptr) {
    // Es seguro usar *ptr aquí
    int value = *ptr;
}

Esta práctica evita que su programa se bloquee debido al acceso a ubicaciones de memoria no válidas. Siempre inicialice los punteros a nullptr cuando los declare, y verifique si son nulos antes de desreferenciarlos.

challenge icon

Desafío

Fácil

Crea un programa que demuestre el uso seguro de punteros verificando si son nulos antes de desreferenciarlos.

Se proporcionará la siguiente entrada:

  • Una cadena que será "valid" o "null"

Tu programa debe:

  1. Declarar una variable entera llamada data e inicializarla con el valor 42
  2. Declarar un puntero llamado ptr
  3. Si la entrada es "valid", asignar la dirección de data a ptr
  4. Si la entrada es "null", asignar nullptr a ptr
  5. Usar una sentencia if para verificar si ptr no es nulo antes de intentar usarlo
  6. Si el puntero no es nulo, imprimir el valor al que apunta
  7. Si el puntero es nulo, imprimir un mensaje de seguridad

Usa el siguiente formato de salida exacto:

Value: [value]

Para punteros nulos, usa este formato:

Pointer is null - cannot dereference

Hoja de referencia

Inicializa los punteros a nullptr para evitar un comportamiento indefinido:

int* ptr = nullptr;  // ptr ahora es un puntero nulo

Comprueba siempre si un puntero no es nulo antes de desreferenciarlo:

if (ptr != nullptr) {
    // Es seguro usar *ptr aquí
    int value = *ptr;
}

La palabra clave nullptr indica explícitamente que el puntero no apunta a ninguna ubicación de memoria válida, lo que hace que tu código sea más seguro y evita fallos al acceder a memoria no válida.

Pruébalo tú mismo

#include <iostream>
#include <string>
using namespace std;

int main() {
    // Leer entrada
    string input;
    cin >> input;
    
    // Declarar la variable de datos
    int data = 42;
    
    // TODO: Escribe tu código aquí
    // - Declarar un puntero llamado ptr
    // - Verificar la entrada y asignar el valor apropiado a ptr
    // - Usar una sentencia if para verificar y usar el puntero de forma segura
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo