Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Evitare
malloc()efree(), preferire lanothrowversione dinewcondelete(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 denominatamallocostd::malloc. La funzione deve restituire un puntatore avoide accettare un parametro di tipo integrale senza segno.Per rilevare
free(), vengono controllate le funzioni globali denominatefreeostd::freeche 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);
}