|
いろいろな解説書に書いてある通り、dangling pointer(参照先がすてに解放されてしまっているためアクセスするとシステムエラーを起こすポインタ)は非常に危険です。どうやったら、dangling pointer を避けることができるでしょうか? 簡単です。たったひとつのガイドラインを導入すれば済みます。
これだけです。 次の悪い例を見てください。 |
|||
|
|
||||
|
上の短いプログラム中で、変数 pi は2度も dangling pointer になっています。わかりますか?
とくに2度目は危険です。多くの処理系では正常に動作するように見えるかもしれませんが、スタック上の解放された領域を指すようなアドレスは絶対に使用してはいけません。解放された領域はもはやシステムのものなので、プログラムから安全に使用できることが保証されていないのです。プログラマが触ってはいけない部分です。 この悪いプログラムを直してみましょう。まず、さきほど述べたガイドラインを導入します。 |
|||
|
|
||||
|
改善された点は次の通りです。
この改善の結果、cout のところでシステムエラーが発生するようになりました。これは、ポインタを 0 にするガイドラインを導入したためにバグが発生したということではありません。もともとコード中に含まれていたバグが、このガイドラインによって表面化したのです。 これでコード中のアルゴリズムが誤っていることがわかったので、修正が必要になりました。しかし、もはや誤りの正体がわかっているので、修正は簡単ですね。 |
|||
(「プログラミングのはなし」は1998年1月から1999年1月にかけて作成されたコンテンツです。)