Share via


Warnung C26408

Vermeiden malloc() und free(), bevorzugen Sie die nothrow Version von new with delete (r.10)

Diese Warnung kennzeichnet Orte, an denen malloc oder free explizit gemäß R.10 aufgerufen wird: Vermeiden malloc und free. Ein potenzieller Fix für solche Warnungen wäre die Verwendung von std::make_unique , um explizite Erstellung und Zerstörung von Objekten zu vermeiden. Wenn ein solcher Fix nicht akzeptabel ist, sollte der neue Operator und das Löschen bevorzugt werden. In einigen Fällen, wenn Ausnahmen nicht willkommen sind und mallocfree durch die Nothrow-Version von Operatoren new und deleteersetzt werden können.

Hinweise

  • Um zu erkennen malloc(), überprüfen wir, ob ein Aufruf eine globale Funktion namens malloc oder std::malloc. Die Funktion muss einen Zeiger void zurückgeben und einen Parameter des nicht signierten integralen Typs akzeptieren.

  • Um zu erkennen free(), überprüfen wir globale Funktionen mit dem Namen free oder std::free die kein Ergebnis zurückgeben und einen Parameter akzeptieren, der ein Zeiger ist void.

Codeanalysename: NO_MALLOC_FREE

Siehe auch

C++ Core Guidelines R.10

Beispiel

#include <new>

struct myStruct {};

void function_malloc_free() {
    myStruct* ms = static_cast<myStruct*>(malloc(sizeof(myStruct))); // C26408
    free(ms); // C26408
}

void function_nothrow_new_delete() {
    myStruct* ms = new(std::nothrow) myStruct;
    operator delete (ms, std::nothrow);
}