Warnung C26408
Vermeiden
malloc()
undfree()
, bevorzugen Sie dienothrow
Version vonnew
withdelete
(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 malloc
free
durch die Nothrow-Version von Operatoren new
und delete
ersetzt werden können.
Hinweise
Um zu erkennen
malloc()
, überprüfen wir, ob ein Aufruf eine globale Funktion namensmalloc
oderstd::malloc
. Die Funktion muss einen Zeigervoid
zurückgeben und einen Parameter des nicht signierten integralen Typs akzeptieren.Um zu erkennen
free()
, überprüfen wir globale Funktionen mit dem Namenfree
oderstd::free
die kein Ergebnis zurückgeben und einen Parameter akzeptieren, der ein Zeiger istvoid
.
Codeanalysename: NO_MALLOC_FREE
Siehe auch
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);
}