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