Udostępnij za pośrednictwem


C28198

Ostrzeżenie C28198: prawdopodobnie nastąpił wyciek pamięci z powodu wyjątku.

Ostrzeżenie to wskazuje, że zaalokowana pamięć nie jest zwalniana po zgłoszeniu wyjątku.Instrukcja na końcu ścieżki może zgłaszać wyjątek.Pamięć została przekazana do funkcji, która może zapisać kopię, która zostanie zwolniona w późniejszym czasie.

Ostrzeżenie to jest bardzo podobne do ostrzegania C28197.Adnotacje, które są zalecane do użytku z ostrzeżeniem C28197 mogą być również używane tutaj.

Przykład

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

char *p1 = new char[10];
char *p2 = new char[10];

test(p1);   // does not save a copy of p

delete[] p2;
delete[] p1;

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

char *p1 = new char[10];
char *p2 = NULL;

test(p1);   // does not save a copy of p
try {
    p2 = new char[10];
} catch (std::bad_alloc *e) {
    // just handle the throw
    ;
}