Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Evite
malloc()efree(), prefira a versão denewcomdeletenothrow(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 chamadamallocoustd::malloc. A função deve retornar um ponteiro paravoide aceitar um parâmetro do tipo integral não assinado.Para detetar
free(), verificamos as funções globais nomeadasfreeoustd::freeque não retornam nenhum resultado e aceitam um parâmetro, que é um ponteiro paravoid.
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);
}