Обнаружение утечек памяти в статическом коде для Visual Studio vC++

Есть ли способ обнаружить простые утечки памяти, подобные этой, с помощью инструмента статического анализа? Я не могу изменить код, чтобы включить типичные включения, используемые для обнаружения утечек памяти во время выполнения (struc1 — это простая структура с некоторыми полями).

void noRelease(void)
{
    struc1 *memoryLeak;

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

VSTS (Visual Studio Team System) обнаруживает утечки памяти из-за исключений, но не может увидеть эту простую утечку.

Любые идеи будут очень полезны. Большое спасибо.


person Ignacio Soler Garcia    schedule 10.08.2010    source источник
comment
Никто никогда не напишет такой код. То, что вы можете писать такой код, не означает, что кому-то будет выгодно написать инструмент для его обнаружения. Это не выгодно.   -  person Hans Passant    schedule 10.08.2010
comment
@Hans: конечно, почти никто не стал бы писать такой код. Это только доказательство концепции. Если инструмент не может обнаружить эту утечку, конечно, он не обнаружит гораздо более серьезные утечки.   -  person Ignacio Soler Garcia    schedule 11.08.2010
comment
@Hans - Проблема в том, что МНОГИЕ люди написали подобный код, и, к сожалению, слишком много такого кода все еще циркулирует.   -  person C Johnson    schedule 16.08.2010


Ответы (2)


Хм... Коверити мог бы сделать это, но вам придется продать свой дом, чтобы заплатить за это. Однажды я написал статический анализатор, который проверяет, вызывается ли пара функций в заданной области видимости функции. Я использовал API статического анализа, который поставляется с программой Understand 4 C++, разработанной scitools. www.scitools.com Я написал поисковик/анализатор, используя управляемый API (который я написал), который обертывает их С API. Примечание. Однако Understand 4 c++ не является бесплатным.

В любом случае, этот инструмент, который я написал, обнаружит отсутствие свободного места в приведенном выше коде. это было не намного умнее, чем это. Если бы указатель был свободен где-то еще, он бы его не нашел.

person C Johnson    schedule 10.08.2010

CPPCheck выполняет статический анализ кода и обнаруживает подобные утечки.

http://cppcheck.sourceforge.net/

person Chris    schedule 18.03.2013