使用 'delete[]' 释放 'new' 对象¶
ID: cpp/new-delete-array-mismatch
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- reliability
Query suites:
- cpp-security-and-quality.qls
此规则查找使用指向使用 new
运算符分配的内存的指针的 delete[]
表达式。这种情况下会导致未定义的行为,应该避免。
new
运算符为一个对象分配内存,然后调用该对象的构造函数,而 delete
则执行相反的操作。然而,数组 delete[]
运算符期望指针指向数组的第一个元素(该数组可能包含指定数组长度的头数据),并将尝试对“数组”中的每个元素调用析构函数,这很可能会导致由于无效的头数据导致的段错误。
警告:此检查是近似的,因此某些结果可能不是程序中的实际缺陷。通常,在不运行程序并使用所有输入数据的情况下,无法计算指针的值。
建议¶
使用 delete
运算符释放使用 new
分配的内存。
示例¶
Record *ptr = new Record(...);
...
delete [] ptr; // ptr was created using 'new', but was freed using 'delete[]'
参考¶
S. Meyers. Effective C++ 3d ed. pp 73-75. Addison-Wesley Professional, 2005.