CWARN.DTOR.VOIDPTR

void へのポインター型のオブジェクトを持つ式を削除します

CWARN.DTOR.VOIDPTR チェッカーは、'void へのポインター' 型を持つオペランドと共に使用される C++ 演算子 delete のインスタンスを検出して報告します。

'void へのポインター' 型は、使用される実際のオブジェクト型の実装詳細を非表示にするために使用できます。この型のオペランドを持つ delete を呼び出すと、基底のオブジェクトデストラクタの呼び出しがバイパスされ、メモリとリソースのリークが発生する可能性があります。このため、void ポインターで呼び出される delete 演算子によるメモリ解放は疑わしい方法であり、バグと判断される可能性があります。

脆弱コード例

コピー
   void foo()
   {
       void* ptr = createAnObj();
       delete ptr; // deleting void pointer - bypasses destructor call
   }

この例では、Klocwork は式 'delete ptr' を CWARN.DTOR.VOIDPTR の欠陥として報告します。

修正コード例

次の例が示すように、これらのオブジェクトの破棄には、ライブラリ実装者が推奨している方法を使用してください。

コピー
   void foo()
   {
       void* ptr = createAnObj();
       destroyAnObj(ptr); // a sample proper way of the object disposal
   }