CWARN.DTOR.VOIDPTR

删除类型为"指向 void 的指针"的对象的表达式

CWARN.DTOR.VOIDPTR 检查器可检测并报告 C++ 运算符"delete"的实例,其中的实例与类型为"指向 void 的指针"的操作数一起使用。

"指向 void 的指针"类型可用于隐藏所用实际对象类型的实施细则。若使用此类型操作数调用"delete",则会绕过基础对象析构函数调用,而且可能导致内存和资源泄漏。因此,在 void 指针上调用 delete 运算符以释放内存的做法很可疑,而且表明可能存在 bug。

漏洞代码示例

复制
   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
   }