ヌルポインタ
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 4/56。
ポインタを宣言したとき、それは自動的に意味のある何かを指すわけではありません。初期化されていないポインタにはランダムなメモリ番地が含まれており、それを使用しようとすると重大なエラーにつながる可能性があります。ここで、安全なプログラミングのためにヌルポインタが不可欠になります。
ヌルポインタは、明示的に何も指していないポインタのことです。モダンなC++では、nullptrで初期化することでヌルポインタを作成します:
int* ptr = nullptr; // ptrは現在ヌルポインタですnullptrキーワードは、ポインタが有効なメモリ位置を指していないことを示します。これは、ポインタを未初期化のままにしておくよりもはるかに安全です。なぜなら、ポインタをデリファレンス(参照解除)しようとする前に、それがnullであるかどうかを確認できるからです。
ポインタを使用する前に、単純なif文を使用して、それがnullでないことを確認する必要があります。
if (ptr != nullptr) {
// ここで*ptrを安全に使用できます
int value = *ptr;
}この慣行により、無効なメモリ位置へのアクセスによるプログラムのクラッシュを防ぐことができます。ポインタを宣言するときは常に nullptr で初期化し、デリファレンスする前にヌルチェックを行ってください。
チャレンジ
簡単ポインタをデリファレンスする前にヌルポインタをチェックすることで、安全なポインタの使用方法を示すプログラムを作成してください。
以下の入力が提供されます:
"valid"または"null"のいずれかの文字列
プログラムは以下の手順を実行する必要があります:
dataという名前の整数型変数を宣言し、値42で初期化しますptrという名前のポインタを宣言します- 入力が
"valid"の場合、dataのアドレスをptrに代入します - 入力が
"null"の場合、nullptrをptrに代入します - if文を使用して、
ptrを使用する前にそれがヌルでないことを確認します - ポインタがヌルでない場合は、それが指している値を出力します
- ポインタがヌルの場合は、安全メッセージを出力します
以下の正確な出力形式を使用してください:
Value: [value]ヌルポインタの場合は、この形式を使用してください:
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文を使用してポインタを安全に確認し、使用する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。