次の方法で共有


C28197

警告 C28197: おそらく、メモリ リーク

この警告は、メモリ リークおよびリソースの両方でリソースが別の位置にエイリアスが設定した場合です。

割り当てられたメモリまたは明示的に解放されていない別の割り当てられたリソースへの ポインター のポインター。この警告は、通常、呼び出し元の関数に十分なコメントが、このの可能性が高くできますが、呼び出された関数の十分なコメントがあります。

この警告は、関数の終了時に入力引数に __drv_freesMem または __drv_aliasesMem のコメントがある場合は報告できます。この警告は、通常、現在の関数によって呼び出された関数で追加のコメントを必要とすると有効なリークまたはを示します。

特に __drv_aliasesMem と同様に __drv_freesMem のコメントが必要な場合がありますが、基本的な _In_ がないと _Out_ のコメントは、この警告を大幅に低減できます。誤認識は _In_ が欠落しているコメントの高い結果です。

ポインターと、エイリアスを受け取る関数は __drv_aliasesMem (したがってリークを回避できます) 注釈する必要があります。グローバルな構造にオブジェクトを作成し、挿入、またはそのシステム関数に渡すと、関数を __drv_aliasesMem のコメントを追加する必要があります。

空きメモリが __drv_freesMemが指定される関数。空きメモリに既にこのコメントを含むメイン関数。

使用例

次のコード例に、この警告が生成されます:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p

次のコード例では、この警告を回避できます:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p
free(p);