Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Evite
malloc()efree(), prefira anothrowversão denewcomdelete(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 chamadamallocoustd::malloc. A função deve retornar um ponteiro paravoide aceitar um parâmetro de tipo integral não assinado.Para detectar
free(), verificamos funções globais chamadasfreeoustd::freeque não retornam nenhum resultado e aceitamos um parâmetro, que é um ponteiro paravoid.
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);
}