cppcheck 未检测到来自 epoll_create 的资源泄漏

Posted

技术标签:

【中文标题】cppcheck 未检测到来自 epoll_create 的资源泄漏【英文标题】:cppcheck not detecting resource leak from epoll_create 【发布时间】:2017-05-22 12:24:26 【问题描述】:

我正在使用 Cppcheck 版本 1.72 使用 epoll_create(1) 测试资源泄漏,但没有收到任何错误。

#include "sys/epoll.h"

int main ()
   int i = 0;
   int epollfd = 0;
   while (i != 10)
      epollfd = epoll_create(1);
      i++;
   

如果cppcheck没有配备这种资源泄漏,谁能告诉我?

【问题讨论】:

【参考方案1】:

我是一名 Cppcheck 开发人员。

Cppcheck 可以检测到此类资源泄漏。但是目前 posix.cfg 根本没有提到 epoll_create(),因此 Cppcheck 不知道这个函数。

快速修复;创建一个包含 epoll_create() 等信息的 epoll.cfg,并在运行 cppcheck (--library) 时使用它。

适当的修复;更新 posix.cfg 文件 (http://github.com/danmar/cppcheck/blob/master/cfg/posix.cfg)。如果您在 github 中向我发送拉取请求,我将很乐意申请。

Cppcheck 需要知道epoll_create() 分配文件描述符以及如何释放它。我相信你使用close()方法来释放它,所以需要的配置是这样的:

  <resource>
    <alloc init="false">epoll_create</alloc>
    <dealloc>close</dealloc>
  </resource>

【讨论】:

以上是关于cppcheck 未检测到来自 epoll_create 的资源泄漏的主要内容,如果未能解决你的问题,请参考以下文章

由于包含路径,cppcheck 未检测到资源泄漏

如何检测仅使用 cppcheck 从未使用的函数中调用的函数?

为啥 cppcheck 工具找不到未初始化的变量?

cppcheck 检测到资源泄漏 - 误报?

将堆指针传递给函数时,cppcheck 无法检测到泄漏?

c++代码检测工具