内存泄漏捕获¶
ID: cpp/catch-missing-free
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- efficiency
- correctness
- exceptions
- external/cwe/cwe-401
Query suites:
- cpp-security-and-quality.qls
现代 C++ 代码和框架不应该抛出或捕获指针。较旧的框架,例如微软的 MFC,会抛出和捕获指针。这些指针通常会指向在堆上分配的异常对象,因此在捕获时需要释放它们。如果未释放它们,会导致内存泄漏。
建议¶
应该在 catch
代码块中增加删除异常指针的语句。
示例¶
void bad() {
try {
/* ... */
}
catch(CException* e) {
e->ReportError();
}
}
void good() {
try {
/* ... */
}
catch(CException* e) {
e->ReportError();
e->Delete();
}
}
参考¶
MFC 的 MSDN 库:异常:捕获和删除异常.
通用弱点枚举:CWE-401.