Condividi tramite


Avviso C26408

Evitare malloc() e free(), preferire la nothrow versione di new con delete (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 denominata malloc o std::malloc. La funzione deve restituire un puntatore a void e accettare un parametro di tipo integrale senza segno.

  • Per rilevare free(), vengono controllate le funzioni globali denominate free o std::free che non restituiscono alcun risultato e accettano un parametro, ovvero un puntatore a void.

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);
}