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 pointer, no apunta automáticamente a nada significativo. Un pointer no inicializado contiene direcciones de memoria aleatorias, lo que puede provocar errores graves si intentas usarlo. Aquí es donde los punteros null se vuelven esenciales para una programación segura.

Un null pointer es un pointer que apunta explícitamente a nada. En C++ moderno, creas un null pointer inicializándolo con nullptr:

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

La palabra clave nullptr indica que el puntero no apunta 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 null antes de intentar desreferenciarlo.

Antes de using cualquier pointer, debes verificar que no sea null mediante una simple instrucción if:

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

Esta práctica evita que tu programa se bloquee debido al acceso a ubicaciones de memoria no válidas. Inicializa siempre los pointer a nullptr cuando los declares y haz check de que no sean null antes de hacer dereference.

challenge icon

Desafío

Fácil

Crea un programa que demuestre el uso seguro de pointer comprobando si hay null antes de desreferenciarlos.

Se proporcionará la siguiente entrada:

  • Un string que será "valid" o "null"

Tu programa debe:

  1. Declarar una variable entera llamada data e inicializarla con el valor 42
  2. Declarar un pointer 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 instrucción if para comprobar que ptr no sea null antes de intentar usarlo
  6. Si el pointer no es null, imprimir el valor al que apunta
  7. Si el pointer es null, imprimir un mensaje de seguridad

Usa el siguiente formato de salida exacto:

Value: [value]

Para pointer nulos, usa este formato:

Pointer is null - cannot dereference

Pruébalo tú mismo

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

int main() {
    // Leer la entrada
    string input;
    cin >> input;
    
    // Declarar la variable data
    int data = 42;
    
    // TODO: Escribe tu código aquí
    // - Declara un puntero llamado ptr
    // - Comprueba la entrada y asigna el valor apropiado a ptr
    // - Usa una sentencia if para comprobar 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

Practica por tu cuenta: Compilador de C++ online