ヌルポインタの話 「尻 が null でした。」 (解説) ( No.62 )
日時: 2023/03/29 10:49
名前: REDCHEEKS

>>61 の続き(解説)

そもそも、 protected けつ 尻 = new けつ();

というブログラム、左辺にも右辺にも尻やけつがあって、尻の臭いプンプン、何をしているやらよくわからないという人への補足説明も兼ねて、ヌルポインタの話を続けよう。

そもそもこのプログラム、1行に書いているが、やっていることは2つ、以下の (a) (b) の2つに分けた方が分かりやすいだろう。

  (a) protected けつ 尻;

  (b) 尻 = new けつ();

**************
まず (a) について、
**************

  これは "尻" という名前の、ポインタを定義している。

  ここで、protected は、公開範囲で、今回の話題とは直接関係ないが、身内内での公開を意味する。

  "尻" は、実際のデータが保存されている場所を示すポインタである。 初期値は、ゼロ(ヌル)である。

  "けつ" は尻のデータ構造を示すクラス(設計図)で、右尻、左尻、ぺんぺんなどの要素が定義されている。

    ※ "尻" ポインタが指し示すデータをアクセスするときは、"けつ" クラスで定義されている構造(テンプレート)を当てはめて今後解釈する。

**************
次に (b) について、
**************

  尻のデータ構造を示すクラス(設計図)である "けつ" に従い、メモリ領域を実際に確保し初期化(new)したのち

  その位置を尻(ポインタ)に設定している。

    ※ これにより、尻ポインタからたどって、右尻、左尻、さらにそれらの色を記憶するメモリ領域が確保されたわけだ。

******************
なぜエラーになったか?
******************

  >>61 でやったことは、(a) だけにしてしまったからだ。 

  つまり(b) がなくなった結果、尻(ポインタ)は、初期値ゼロ(ヌル)のままとなり、尻ポインタからたどって、右尻、左尻、さらにそれらの色を記憶するメモリ領域をアクセスしようとする処理が不可能になったのだ。