Advertencia C26408
Evite
malloc()
yfree()
, prefiera lanothrow
versión denew
condelete
(r.10)
Esta marca de advertencia se coloca dónde malloc
o free
se invocan explícitamente de acuerdo con R.10: Evite malloc
y free
. Una posible corrección para estas advertencias sería usar std::make_unique para evitar la creación y destrucción explícitas de objetos. Si esta corrección no es aceptable, debe preferirse el operador new y delete . En algunos casos, si no se admiten malloc
excepciones y free
se puede reemplazar por la versión nothrow de los operadores new
y delete
.
Comentarios
Para detectar
malloc()
, comprobamos si una llamada invoca una función global denominadamalloc
ostd::malloc
. La función debe devolver un puntero avoid
y aceptar un parámetro de tipo entero sin signo.Para detectar
free()
, comprobamos las funciones globales denominadasfree
ostd::free
que no devuelven ningún resultado y aceptamos un parámetro, que es un puntero avoid
.
Nombre del análisis de código: NO_MALLOC_FREE
Consulte también
Ejemplo
#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);
}