Avertissement C26408
Évitez
malloc()
etfree()
préférez lanothrow
version d’avecnew
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éemalloc
oustd::malloc
. La fonction doit retourner un pointeur versvoid
et accepter un paramètre de type intégral non signé.Pour détecter
free()
, nous vérifions les fonctions globales nomméesfree
oustd::free
qui ne retournent aucun résultat et acceptent un paramètre, qui est un pointeur versvoid
.
Nom de l’analyse du code : NO_MALLOC_FREE
Voir aussi
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);
}