Нулевые указатели
Часть раздела Логика и управление потоком путешествия по C++ на Coddy — урок 4 из 56.
Когда вы объявляете указатель, он не указывает автоматически на что-то осмысленное. Неинициализированный указатель содержит случайные адреса памяти, что может привести к серьезным ошибкам, если вы попытаетесь его использовать. Именно здесь нулевые указатели становятся необходимыми для безопасного программирования.
Нулевой указатель — это указатель, который явно ни на что не указывает. В современном C++ вы создаете нулевой указатель, инициализируя его с помощью nullptr:
int* ptr = nullptr; // теперь ptr является нулевым указателемКлючевое слово nullptr указывает на то, что указатель не ссылается на какой-либо допустимый адрес памяти. Это гораздо безопаснее, чем оставлять указатель неинициализированным, так как вы можете проверить, является ли указатель нулевым, прежде чем пытаться его разыменовать.
Перед использованием любого указателя следует убедиться, что он не равен null, используя простой оператор if:
if (ptr != nullptr) {
// Здесь безопасно использовать *ptr
int value = *ptr;
}Эта практика предотвращает аварийное завершение вашей программы из-за обращения к недопустимым участкам памяти. Всегда инициализируйте указатели значением nullptr при их объявлении и проверяйте на null перед разыменованием.
Задание
ЛегкоСоздайте программу, которая демонстрирует безопасное использование указателей путем проверки на наличие нулевых указателей перед их разыменованием.
Будут предоставлены следующие входные данные:
- Строка, которая будет иметь значение либо
"valid", либо"null"
Ваша программа должна:
- Объявить целочисленную переменную с именем
dataи инициализировать ее значением42 - Объявить указатель с именем
ptr - Если входная строка равна
"valid", присвоить адресdataуказателюptr - Если входная строка равна
"null", присвоитьnullptrуказателюptr - Использовать оператор if для проверки того, что
ptrне является нулевым, прежде чем пытаться его использовать - Если указатель не является нулевым, вывести значение, на которое он указывает
- Если указатель нулевой, вывести сообщение о безопасности
Используйте следующий точный формат вывода:
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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаров