Avviso C26408
Evitare
malloc()
efree()
, preferire lanothrow
versione dinew
condelete
(r.10)
Questo avviso contrassegna la posizione in cui malloc
o free
viene richiamato in modo esplicito in base a R.10: Evitare malloc
e free
. Una possibile correzione per tali avvisi sarebbe usare std::make_unique per evitare la creazione e la distruzione esplicita degli oggetti. Se una correzione di questo tipo non è accettabile, è consigliabile preferire l'operatore new and delete . In alcuni casi, se le eccezioni non sono benvenute malloc
e free
possono essere sostituite con la versione nothrow degli operatori new
e delete
.
Osservazioni:
Per rilevare
malloc()
, viene verificato se una chiamata richiama una funzione globale denominatamalloc
ostd::malloc
. La funzione deve restituire un puntatore avoid
e accettare un parametro di tipo integrale senza segno.Per rilevare
free()
, vengono controllate le funzioni globali denominatefree
ostd::free
che non restituiscono alcun risultato e accettano un parametro, ovvero un puntatore avoid
.
Nome dell'analisi del codice: NO_MALLOC_FREE
Vedi anche
Linee guida di base di C++R.10
Esempio
#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);
}