Upozornění C26408
Vyhněte se
malloc()
afree()
upřednostnětenothrow
verzinew
sdelete
verzí (r.10)
Toto upozornění označuje místa, kde malloc
nebo free
je vyvolána explicitně v souladu s R.10: Vyhněte se malloc
a free
. Jedním z možných oprav takových upozornění je použití std::make_unique , aby se zabránilo explicitnímu vytvoření a zničení objektů. Pokud taková oprava není přijatelná, měli byste preferovat operátory new a delete . V některých případech, pokud výjimky nejsou vítány malloc
a free
lze je nahradit nothrow verze operátorů new
a delete
.
Poznámky
Abychom zjistili
malloc()
, zkontrolujeme, jestli volání vyvolá globální funkci s názvemmalloc
nebostd::malloc
. Funkce musí vrátit ukazatel navoid
celočíselný typ bez znaménka a přijmout jeden parametr.Abychom zjistili
free()
, kontrolujeme globální funkce pojmenovanéfree
nebostd::free
vracejí žádný výsledek a přijímají jeden parametr, což je ukazatel navoid
.
Název analýzy kódu: NO_MALLOC_FREE
Viz také
Příklad
#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);
}