Partilhar via


Aviso C26408

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

Este aviso sinaliza locais onde malloc ou free é invocado explicitamente de acordo com R.10: Evitar malloc e free. Uma possível correção para tais avisos seria usar std::make_unique para evitar a criação explícita e destruição de objetos. Se tal correção não for aceitável, o operador novo e excluir deve ser preferido. 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.

Observações

  • Para detetar malloc()o , 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 do tipo integral não assinado.

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

Nome da análise de código: NO_MALLOC_FREE

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