新/释放或 malloc/delete 不匹配¶
ID: cpp/new-free-mismatch
Kind: problem
Security severity: 7.5
Severity: warning
Precision: high
Tags:
- reliability
- security
- external/cwe/cwe-401
Query suites:
- cpp-code-scanning.qls
- cpp-security-extended.qls
- cpp-security-and-quality.qls
此规则查找 delete
表达式,其参数是指向使用 malloc
函数分配的内存的指针,以及 free
的调用,其参数是指向使用 new
运算符分配的内存的指针。在这些情况下,行为是未定义的,应避免。
建议¶
在释放使用 new
分配的内存时使用 delete
运算符,在释放使用 malloc
分配的内存时使用 free
函数。
示例¶
Record *ptr = new Record(...);
...
free(ptr); // BAD: ptr was created using 'new', but is being freed using 'free'
参考¶
isocpp.org ‘标准 C++’, “我可以释放使用 new 分配的指针吗?我可以删除使用 malloc() 分配的指针吗?”
维基百科,“与 malloc 和 free 的关系” 在 new 和 delete (C++) 中。
常见弱点枚举:CWE-401.