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 essa correção não for aceitável, operator new e delete deverão ser preferidos. Em alguns casos, se as exceções não forem bem-vindas malloc e free puderem ser substituídas pela versão nothrow dos operadores new e delete.

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