Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Évitez
malloc()etfree()préférez lanothrowversion d’avecnewdelete(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 mallocfree 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éemallocoustd::malloc. La fonction doit retourner un pointeur versvoidet accepter un paramètre de type intégral non signé.Pour détecter
free(), nous vérifions les fonctions globales nomméesfreeoustd::freequi 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);
}