dbx コマンドによるデバッグ

レジスタ中のアドレス (air)

意味 : メモリーリークの可能性がある。割り当てられたブロックが解放されておらず、そのブロックへの参照がプログラム内のどこにも存在しない。 

考えられる原因 : 割り当てられているブロックへの唯一の参照は、レジスタ内に含まれています。このようなことは、コンパイラがプログラム変数をメモリー内ではなくレジスタ内だけに保持している場合に発生し、その動作は正しいこともあります。最適化がオンになっている場合、コンパイラは局所変数や関数パラメータに対してこのような操作をよく行います。最適化がオンになっていないときにこのエラーが発生した場合は、実際のメモリーリークが考えられます。たとえば、割り当てられているブロックへの唯一のポインタが、そのブロックの解放前にスコープ外に出た場合にこのエラーが発生します。 

例 :


      if (i == 0) {
            char *ptr = (char *)malloc(4);
            /* ポインタがスコープ外に出た */
      }
    /* メモリーリークまたはレジスタ中のアドレス (air) */