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
;
}