Compartir vía


Advertencia C26408

Evite malloc() y free(), prefiera la nothrow versión de new con delete (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 denominada malloc o std::malloc. La función debe devolver un puntero a void y aceptar un parámetro de tipo entero sin signo.

  • Para detectar free(), comprobamos las funciones globales denominadas free o std::free que no devuelven ningún resultado y aceptamos un parámetro, que es un puntero a void.

Nombre del análisis de código: NO_MALLOC_FREE

Consulte también

C++ Core Guidelines R.10

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