Нулевые указатели
Часть раздела Логика и управление потоком путешествия по 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 перед разыменованием.
Задание
ЛегкоСоздайте программу, демонстрирующую безопасное использование Safe Pointer, проверяя null Pointer перед попыткой выполнить dereference.
Будет предоставлен следующий input:
- string, который будет иметь значение
"valid"или"null"
Ваша программа должна:
- Declare целочисленную variable named
dataи инициализировать её значением42 - Declare Pointer named
ptr - Если input равен
"valid", assign адресdataпеременнойptr - Если input равен
"null", assignnullptrпеременнойptr - Использовать if-statement, чтобы check, что
ptrне равен null, прежде чем пытаться его использовать - Если Pointer не равен null, вывести значение, на которое он указывает
- Если 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;
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Указатели и память
Что такое указатель?Оператор взятия адресаОператор разыменованияНулевые указателиУказатели и массивыДинамическая память и 'new'Освобождение памяти и 'delete'Итоги: Практика с указателями2Векторы (динамические массивы)
Знакомство с std::vectorСоздание вектораДобавление элементовДоступ к элементамРазмер вектораИтерация с помощью цикла ForRange-based цикл ForУдаление элементовИтоги: операции с векторами5Проект: Инструмент инвентаризации
Настройка проектаДобавление и обновление товаровПотренируйтесь самостоятельно: Онлайн-компилятор C++