Partager via


Avertissement C26408

Évitez malloc() et free()préférez la nothrow version d’avec new delete (r.10)

Cet indicateur d’avertissement place malloc ou free est appelé explicitement conformément à R.10 : Éviter malloc et free. Un correctif potentiel pour ces avertissements consisterait à utiliser std ::make_unique pour éviter la création et la destruction explicites d’objets. Si ce correctif n’est pas acceptable, l’opérateur nouveau et la suppression doivent être préférés. Dans certains cas, si les exceptions ne sont pas bienvenues et malloc free peuvent être remplacées par la version nothrow des opérateurs new et delete.

Notes

  • Pour détecter malloc(), nous vérifions si un appel appelle une fonction globale nommée malloc ou std::malloc. La fonction doit retourner un pointeur vers void et accepter un paramètre de type intégral non signé.

  • Pour détecter free(), nous vérifions les fonctions globales nommées free ou std::free qui ne retournent aucun résultat et acceptent un paramètre, qui est un pointeur vers void.

Nom de l’analyse du code : NO_MALLOC_FREE

Voir aussi

Instructions de base C++ R.10

Exemple

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