Menu
Coddy logo textTech

ヌルポインタ

CoddyのC++ジャーニー「論理と制御フロー」セクションの一部 — レッスン 4/56。

ポインタを宣言したとき、それは自動的に意味のある何かを指すわけではありません。初期化されていないポインタにはランダムなメモリ番地が含まれており、それを使用しようとすると重大なエラーにつながる可能性があります。ここで、安全なプログラミングのためにヌルポインタが不可欠になります。

ヌルポインタは、明示的に何も指していないポインタのことです。モダンなC++では、nullptrで初期化することでヌルポインタを作成します:

int* ptr = nullptr;  // ptrはヌルポインタになりました

nullptr キーワードは、ポインタが有効なメモリ位置を指していないことを示します。これは、ポインタを未初期化のままにするよりもはるかに安全です。なぜなら、ポインタをデリファレンス(参照解除)しようとする前に、それが null かどうかを確認できるからです。

ポインタを使用する前に、単純なif文を使用して、それがnullでないことを確認する必要があります。

if (ptr != nullptr) {
    // ここで*ptrを安全に使用できます
    int value = *ptr;
}

この慣行により、無効なメモリ位置へのアクセスによるプログラムのクラッシュを防ぐことができます。ポインタを宣言する際は常に nullptr で初期化し、デリファレンスする前にヌル(null)であるかを確認してください。

challenge icon

チャレンジ

簡単

ポインタをデリファレンスする前にヌルポインタをチェックすることで、安全なポインタの使用方法を示すプログラムを作成してください。

以下の入力が提供されます:

  • "valid" または "null" のいずれかの文字列

プログラムは以下の手順を実行する必要があります:

  1. data という名前の整数型変数を宣言し、値 42 で初期化します
  2. ptr という名前のポインタを宣言します
  3. 入力が "valid" の場合、data のアドレスを ptr に代入します
  4. 入力が "null" の場合、nullptrptr に代入します
  5. if文を使用して、ptr を使用する前にそれがヌルでないことを確認します
  6. ポインタがヌルでない場合は、それが指している値を出力します
  7. ポインタがヌルの場合は、安全メッセージを出力します

以下の正確な出力形式を使用してください:

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;
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理と制御フローのすべてのレッスン