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 nuloLa 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.
Desafío
FácilCrea un programa que demuestre el uso seguro de pointer comprobando si hay null antes de desreferenciarlos.
Se proporcionará la siguiente entrada:
- Un
stringque será"valid"o"null"
Tu programa debe:
- Declarar una variable entera llamada
datae inicializarla con el valor42 - Declarar un
pointerllamadoptr - Si la entrada es
"valid", asignar la dirección dedataaptr - Si la entrada es
"null", asignarnullptraptr - Usar una instrucción if para comprobar que
ptrno seanullantes de intentar usarlo - Si el
pointerno esnull, imprimir el valor al que apunta - Si el
pointeresnull, imprimir un mensaje de seguridad
Usa el siguiente formato de salida exacto:
Value: [value]Para pointer nulos, usa este formato:
Pointer is null - cannot dereferencePrué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;
}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 tareaPractica por tu cuenta: Compilador de C++ online