Ostrzeżenie C26408
Unikaj
malloc()
ifree()
, preferujnothrow
wersję elementudelete
new
(r.10)
To ostrzeżenie flaguje miejsca, w których malloc
lub free
jest wywoływany jawnie zgodnie z R.10: Unikaj malloc
i free
. Jedną z możliwych poprawek takich ostrzeżeń byłoby użycie polecenia std::make_unique w celu uniknięcia jawnego tworzenia i niszczenia obiektów. Jeśli taka poprawka nie jest akceptowalna, preferowane powinny być operatory new i delete . W niektórych przypadkach, jeśli wyjątki nie są mile widziane i malloc
free
można je zastąpić wersją nothrow operatorów new
i delete
.
Uwagi
Aby wykryć
malloc()
, sprawdzamy, czy wywołanie wywołuje funkcję globalną o nazwiemalloc
lubstd::malloc
. Funkcja musi zwrócić wskaźnik dovoid
i zaakceptować jeden parametr niepodpisanego typu całkowitego.Aby wykryć
free()
, sprawdzamy funkcje globalne o nazwiefree
lubstd::free
które nie zwracają żadnego wyniku i akceptują jeden parametr, który jest wskaźnikiem dovoid
.
Nazwa analizy kodu: NO_MALLOC_FREE
Zobacz też
Podstawowe wytyczne języka C++ R.10
Przykład
#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);
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla