Udostępnij za pośrednictwem


C28197

Ostrzeżenie C28197: Możliwy wyciek pamięci

To ostrzeżenie jest raportowane zarówno w przypadku wycieków pamięci oraz zasobów, kiedy mogą być aliasowane do innej lokalizacji.

pointer wskazuje na przydzieloną pamięć lub na inny przydzielony zasób, który nie był jawnie zwolniony.To ostrzeżenie zazwyczaj odnosi się do nieadekwatnych adnotacji dla wywoływanych funkcji, chociaż nieadekwatne adnotacja dla funkcji wywołujących również mogą się do tego przyczynić.

Ostrzeżenie to może być raportowane po wyjściu z funkcji jeśli argument wejściowy ma adnotację __drv_freesMem lub __drv_aliasesMem.Ostrzeżenie to zazwyczaj wskazuje na prawidłowy przeciek lub na to, że funkcja, wywołana przez bieżącą funkcję potrzebuje dodatkowej adnotacji.

W szczególności, brak podstawowych adnotacji _In_ i _Out_ powoduje, że wystąpienie tego ostrzeżenia jest bardzo prawdopodobne, chociaż adnotacje __drv_aliasesMem i __drv_freesMem również mogą być wymagane.Wynik fałszywie dodatni jest prawdopodobnie wynikiem brakującej adnotacji _In_.

Funkcje, które tworzą alias wskaźnika (unikając zatem przecieku) powinny zostać posiadać adnotację __drv_aliasesMem.Jeśli stworzono funkcję, która wstawia obiekt do struktury globalnej lub przekazuje go do funkcji systemowej, która to robi, należy dodać adnotację __drv_aliasesMem.

Funkcje, które zwalniają pamięć powinny być oznaczone __drv_freesMem.Główne funkcje, które zwalniają pamięć już posiadają tą adnotację.

Przykład

Poniższy kod przykładowy generuje to ostrzeżenie:

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

Poniższy kod przykładowy pozwala uniknąć tego ostrzeżenia:

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