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 nuloLa 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.
Desafío
FácilCrea 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:
- Declarar una variable entera llamada
datae inicializarla con el valor42 - Declarar un puntero llamado
ptr - Si la entrada es
"valid", asignar la dirección dedataaptr - Si la entrada es
"null", asignarnullptraptr - Usar una sentencia if para verificar si
ptrno es nulo antes de intentar usarlo - Si el puntero no es nulo, imprimir el valor al que apunta
- 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 dereferenceHoja de referencia
Inicializa los punteros a nullptr para evitar un comportamiento indefinido:
int* ptr = nullptr; // ptr ahora es un puntero nuloComprueba 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;
}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
1Punteros y memoria
¿Qué es un puntero?Operador de direcciónOperador de desreferenciaPunteros nulosPunteros y arraysMemoria dinámica con 'new'Liberar memoria con 'delete'Resumen: Práctica de punteros2Vectores (Arrays dinámicos)
Introducción a std::vectorCreación de un VectorAgregar elementosAcceder a los elementosTamaño del VectorIterar con un bucle ForBucle For basado en rangosEliminar elementosResumen - Operaciones con Vectores5Proyecto: Herramienta de inventario
Configuración del proyectoAgregar y actualizar artículos3Proyecto: Herramienta de lista de tareas
Descripción general del proyectoAñadir una tarea