# V611. Memory allocation and deallocation methods are incompatible.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что память может выделятьcя и освобождаться несовместимыми между собой способами.

Например, анализатор предупредит, если память выделена с помощью оператора 'new', а освобождается с помощью функции 'free'.

Рассмотрим пример некорректного кода:

    int *p = (int *)malloc(sizeof(int) * N);
    ...
    ...
    delete [] p;

Исправленный вариант:

    int *p = (int *)malloc(sizeof(int) * N);
    ...
    ...
    free(p);

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

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

CWE-590 CWE-762 CERT-MEM51-CPP

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