Поделиться через


C28197

предупреждение C28197: Возможная утечка памяти

Это предупреждение появляется как для памяти, так и для утечек ресурсов, когда ресурсу потенциально присвоен псевдоним в другое месте.

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

Это предупреждение возникает для функции выхода, если входной аргумент имеет заметку __drv_freesMem или __drv_aliasesMem.Это предупреждение обычно указывает, что либо допустимая утечка памяти, либо функция, вызываемая текущей функцией, нуждается в дополнительной заметке.

В частности, отсутствие основных заметок _In_ и _Out_ выдает это предупреждение, хотя заметки __drv_aliasesMem и __drv_freesMem также могут быть необходимы.Ложный положительный результат является вероятнее результатом отсутствующей заметки _In_.

Функции, получающие указатель и псевдоним (таким образом, предотвращается утечка) должны быть аннотированы __drv_aliasesMem.Если создается функция, которая вставляет объект в глобальной структуру или передать его в системную функцию, которая делает это, необходимо добавить заметку __drv_aliasesMem.

Функции, чей объем свободной памяти должен быть аннотирован __drv_freesMem.Основные функции, чей объем свободной памяти уже имеет эту заметку.

Пример

Это предупреждение появляется в следующем примере кода:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p

В следующем примере кода показано, как избежать появления данного предупреждения:

char *p = (char *)malloc(10);
test(p);   // does not save a copy of p
free(p);