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
}