Visual Studio vc++的静态代码内存泄漏检测

Posted

技术标签:

【中文标题】Visual Studio vc++的静态代码内存泄漏检测【英文标题】:Static code memory leak detection for 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 - 问题是很多人都写过类似的代码,不幸的是,太多这样的代码仍然在流传。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

http://cppcheck.sourceforge.net/

【讨论】:

以上是关于Visual Studio vc++的静态代码内存泄漏检测的主要内容,如果未能解决你的问题,请参考以下文章

visualstudioinstaller有病毒吗

VC 编译器 (Visual Studio 2015) 无法链接大 (>2G) 静态库文件

360杀毒只要一检测到 Microsoft Visual Studio 11.0 文件夹 下的VC文件夹 电脑内存就满了,哪都点不动

如何在visual studio2008中创建,编译和运行C++程序,

visual studio 2008 生成exe文件太大了,都要几百K,而vc6.0才十多K

在 VC++ 中创建 DLL (Visual Studio 2008)