Menu
Coddy logo textTech

Нулевые указатели

Часть раздела Логика и управление потоком путешествия по C++ на Coddy. Урок 4 из 56.

Когда вы объявляете pointer, он автоматически не указывает ни на что значимое. Неинициализированный pointer содержит случайные адреса памяти, что может привести к серьёзным ошибкам при попытке его использовать. Именно поэтому null pointer необходимы для безопасного программирования.

null pointer — это pointer, который явно указывает в никуда. В современном C++ вы создаёте null pointer, инициализируя его с помощью nullptr:

int* ptr = nullptr;  // ptr теперь является нулевым указателем

Ключевое слово nullptr указывает, что указатель не указывает ни на одну допустимую область памяти. Это гораздо безопаснее, чем оставлять указатель неинициализированным, поскольку перед попыткой разыменовать его можно проверить, является ли указатель null.

Перед using любого pointer следует проверить, что он не равен null, используя простой оператор if:

if (ptr != nullptr) {
    // Здесь безопасно использовать *ptr
    int value = *ptr;
}

Эта практика предотвращает сбой вашей программы из-за обращения к недействительным адресам памяти. Всегда инициализируйте указатели значением nullptr при их объявлении и проверяйте значение на null перед разыменованием.

challenge icon

Задание

Легко

Создайте программу, демонстрирующую безопасное использование Safe Pointer, проверяя null Pointer перед попыткой выполнить dereference.

Будет предоставлен следующий input:

  • string, который будет иметь значение "valid" или "null"

Ваша программа должна:

  1. Declare целочисленную variable named data и инициализировать её значением 42
  2. Declare Pointer named ptr
  3. Если input равен "valid", assign адрес data переменной ptr
  4. Если input равен "null", assign nullptr переменной ptr
  5. Использовать if-statement, чтобы check, что ptr не равен null, прежде чем пытаться его использовать
  6. Если Pointer не равен null, вывести значение, на которое он указывает
  7. Если Pointer равен null, вывести сообщение о безопасности

Используйте следующий точный формат вывода:

Value: [value]

Для null Pointer используйте этот формат:

Pointer is null - cannot dereference

Попробуйте сами

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

int main() {
    // Считать ввод
    string input;
    cin >> input;
    
    // Объявить переменную data
    int data = 42;
    
    // TODO: Напишите свой код здесь
    // - Объявить указатель с именем ptr
    // - Проверить ввод и присвоить подходящее значение ptr
    // - Использовать if-statement для безопасной проверки и использования указателя
    
    return 0;
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор C++