『高品質C++/Cプログラミングガイド』の根絶「野指針」


「野ポインタ」はNULLポインタではなく、「ゴミ」メモリへのポインタです.一般的にNULLポインタを誤用することはありません.if文で判断しやすいからです.しかし、「野ポインタ」は危険で、if文は役に立たない.
 
「野指針」の成因は主に2つあります.
 
1ポインタ変数は初期化されていません.任意のポインタ変数は作成されたばかりのときに自動的にNULLポインタにはなりません.デフォルト値はランダムで、むやみに指を指します.したがって、ポインタ変数は作成と同時に初期化されるべきであり、ポインタをNULLに設定するか、合法的なメモリを指すようにします.たとえば
char *p = NULL;
char *str = (char *) malloc(100);

 
2
ししん
pはfreeやdeleteにされた後、NULLに置かれず、pと勘違いさせられる
合法的な指針です.参照
7.5
セクション.
 
3ポインタ操作は変数の作用範囲を超えている.このような状況は防ぎきれない.例のプログラムは以下の通りである.
class A 
{   
public:
   void Func(void){ cout << “Func of class A” << endl; }
};

void Test(void)
{
    A  *p;
   {
       A  a;
       p = &a;    //    a     
  }
        p->Func();      // p “   ”
} 

関数Testは文p->Func()を実行するとオブジェクトaが消え,pはaを指すのでpは「野ポインタ」となる.しかし、不思議なことに、私はこのプログラムを実行してもエラーがありません.これはコンパイラと関係があるかもしれません.