Udostępnij za pośrednictwem


Ostrzeżenie C26404

Nie usuwaj elementu owner<T> , który może być w nieprawidłowym stanie (r.3)

Uwagi

Po wydaniu lub przeniesieniu zasobu przez wskaźnik właściciela staje się w stanie "nieprawidłowy". Usunięcie takiego wskaźnika może prowadzić do natychmiastowego uszkodzenia pamięci z powodu podwójnego usunięcia lub naruszenia dostępu w przypadku uzyskania dostępu do usuniętego zasobu z innego wskaźnika właściciela.

Nazwa analizy kodu: DONT_DELETE_INVALID

Przykład 1

Usunięcie właściciela po przeniesieniu jego wartości:

gsl::owner<State*> validState = nullptr;
gsl::owner<State*> state = ReadState();
validState = state;
if (!IsValid(state))
    delete state;   // C26404

Przykład 2

Usuwanie niezainicjowanego właściciela:

gsl::owner<Message*> message;
if (popLast)
    message = ReleaseMessage();
delete message; // C26404