Menu
Coddy logo textTech

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

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

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

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

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

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

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

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

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

challenge icon

Задание

Легко

Создайте программу, которая демонстрирует безопасное использование указателей путем проверки на наличие нулевых указателей перед их разыменованием.

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

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

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

  1. Объявить целочисленную переменную с именем data и инициализировать ее значением 42
  2. Объявить указатель с именем ptr
  3. Если входная строка равна "valid", присвоить адрес data указателю ptr
  4. Если входная строка равна "null", присвоить nullptr указателю ptr
  5. Использовать оператор if для проверки того, что ptr не является нулевым, прежде чем пытаться его использовать
  6. Если указатель не является нулевым, вывести значение, на которое он указывает
  7. Если указатель нулевой, вывести сообщение о безопасности

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

Value: [value]

Для нулевых указателей используйте этот формат:

Pointer is null - cannot dereference

Шпаргалка

Инициализируйте указатели значением nullptr, чтобы избежать неопределенного поведения:

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

Всегда проверяйте, не является ли указатель нулевым, перед разыменованием:

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

Ключевое слово nullptr явно указывает на то, что указатель не ссылается на какой-либо допустимый адрес памяти, что делает ваш код более безопасным и предотвращает сбои при доступе к недопустимой памяти.

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

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

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

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

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