CodeQL 文档

内存泄漏捕获

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

点击查看 CodeQL 代码库中的查询

现代 C++ 代码和框架不应该抛出或捕获指针。较旧的框架,例如微软的 MFC,会抛出和捕获指针。这些指针通常会指向在堆上分配的异常对象,因此在捕获时需要释放它们。如果未释放它们,会导致内存泄漏。

建议

应该在 catch 代码块中增加删除异常指针的语句。

示例

void bad() {
  try {
    /* ... */
  }
  catch(CException* e) {
    e->ReportError();
  }
}

void good() {
  try {
    /* ... */
  }
  catch(CException* e) {
    e->ReportError();
    e->Delete();
  }
}

参考

  • ©2025GitHub, Inc.
  • 条款
  • 隐私