ヌルポインタ
CoddyのC++ジャーニー「論理と制御フロー」セクションの一部。レッスン 4/56。
pointerをDeclareしても、自動的に意味のある対象を指すわけではありません。初期化されていないpointerにはランダムなメモリアドレスが含まれているため、それを使おうとすると重大なエラーにつながる可能性があります。ここでnull pointerがSafeなプログラミングに不可欠になります。
nullポインターとは、明示的に何も指していないポインターです。現代のC++では、nullptrで初期化することでnullポインターを作成します。
int* ptr = nullptr; // ptr は現在ヌルポインタですnullptr キーワードは、pointer が有効なメモリ位置を指していないことを示します。これは pointer を初期化しないままにしておくよりもはるかに安全です。pointer を dereference しようとする前に、pointer が null かどうかを check できるためです。
ポインターを使用する前に、単純な if 文を使って null でないことを確認する必要があります。
if (ptr != nullptr) {
// ここで *ptr を安全に使用できます
int value = *ptr;
}この練習により、無効なメモリ位置にアクセスしてプログラムがクラッシュするのを防げます。pointer を宣言するときは必ず nullptr に初期化し、dereference する前に null を確認してください。
チャレンジ
簡単null ポインターを参照解除する前に確認することで、安全なポインターの使用方法を示すプログラムを作成してください。
次の入力が与えられます:
"valid"または"null"のいずれかとなる string
プログラムでは次の処理を行ってください:
- 整数 variable
dataを Declare し、値42で初期化する ptrという名前の pointer を Declare する- 入力が
"valid"の場合、dataのアドレスをptrに assign する - 入力が
"null"の場合、nullptrをptrに assign する - 使用を試みる前に、
ptrが null でないかを if-statement で check する - 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文を使ってポインタを安全に確認し使用する
return 0;
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理と制御フローのすべてのレッスン
自分で練習してみよう: C++オンラインコンパイラ