Compartilhar via


Aviso C26408

Evite malloc() e free(), prefira a nothrow versão de new com delete (r.10)

Esses sinalizadores de aviso colocam onde malloc ou free é invocado explicitamente de acordo com o R.10: Evitar malloc e free. Uma correção potencial para esses avisos seria usar std::make_unique para evitar criação explícita e a destruição de objetos. Se tal correção não for aceitável, o operador novo e o delete devem ser preferidos. Em alguns casos, se exceções não forem bem-vindas, malloc e podem ser substituídas pela versão nothrow de operadores new e freedelete.

Comentários

  • Para detectar malloc(), verificamos se uma chamada invoca uma função global chamada malloc ou std::malloc. A função deve retornar um ponteiro para void e aceitar um parâmetro de tipo integral não assinado.

  • Para detectar free(), verificamos funções globais nomeadas free ou std::free que não retornam nenhum resultado e aceitamos um parâmetro, que é um ponteiro para void.

Nome da análise de código: NO_MALLOC_FREE

Confira também

Diretrizes Principais do C++ R.10

Exemplo

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