【问题标题】:Static code memory leak detection for visual studio vc++Visual Studio vc++的静态代码内存泄漏检测
【发布时间】:2011-03-27 22:14:50
【问题描述】:

有没有办法用静态分析工具检测像这样的简单内存泄漏?我无法更改代码以包含运行时内存泄漏检测中使用的典型包含(struc1 是具有一些字段的简单结构)。

void noRelease(void)
{
    struc1 *memoryLeak;

    memoryLeak = (struc1 *) malloc(sizeof struc1);
    if (NULL != memoryLeak)
    {
        memoryLeak->a=3;
    }
}

VSTS (Visual Studio Team System) 检测到由于异常导致的内存泄漏,但无法看到这个简单的泄漏。

任何想法都会非常有帮助。 非常感谢。

【问题讨论】:

  • 没有人会写出这样的代码。您可以编写这样的代码并不意味着有人会发现编写一个工具来检测它是有利可图的。这不赚钱。
  • @Hans:当然,几乎没有人会编写这样的代码。这只是一个概念证明。如果一个工具不能检测到这一点,它当然不会检测到更严重的泄漏。
  • @Hans - 问题是很多人都写过类似的代码,不幸的是,太多这样的代码仍然在流传。

标签: visual-studio visual-c++ memory-leaks static-analysis


【解决方案1】:

嗯... Coverity 可以做到这一点,但你必须卖掉你的房子来支付它。 我曾经写过一个静态分析器,它检查是否在给定的函数范围内调用了一对函数。我使用了一个静态分析 API,它带有一个由 scitools 制作的名为“Understand 4 C++”的程序。 www.scitools.com 我使用包装了他们的 C API 的managed API(我写的)编写了搜索器/审查器。注意:但是,理解 4 c++ 不是免费的。

无论如何,我编写的那个工具会检测到上面代码中缺少 free 的情况。它并不比这更聪明。如果指针在其他地方被释放,它将找不到它。

【讨论】:

    【解决方案2】:

    CPPCheck 进行静态代码分析并检测此类泄漏

    http://cppcheck.sourceforge.net/

    【讨论】:

      猜你喜欢
      • 2015-03-25
      • 1970-01-01
      • 2011-02-18
      • 2015-05-03
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      相关资源
      最近更新 更多