# V726. Attempt to free memory containing the 'int A[10]' array by using the 'free(A)' function.

Анализатор обнаружил ошибочный код, в котором осуществляется попытка удаления массива через функцию free() или схожую с ней. При этом, память под этот массив не была выделена при помощи специальных функций, таких как malloc(). Подобные действия являются причиной неопределённого поведения.

Пример:

    class A
    {
      int a[50];
      public:
        A(){}
        ~A(){ free(a); }
    };

Так как память не была выделена каким-то специальным образом, не стоит также и вызывать каких-либо специальных функций для её очистки – она будет произведена автоматически при уничтожении объекта. Следовательно, в данном случае корректный код должен был выглядеть следующим образом:

    class A
    {
      int a[50];
      public:
        A(){}
        ~A(){}
    };

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки управления динамической памятью (выделения, освобождения, использования освобожденной памяти) [* см. примечание касательно языков C#, Java].

Данная диагностика классифицируется как:

CWE-761 CERT-MEM34-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V726.