Aviso C26408
Evite
malloc()
efree()
, prefira anothrow
versão denew
comdelete
(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 free
delete
.
Comentários
Para detectar
malloc()
, verificamos se uma chamada invoca uma função global chamadamalloc
oustd::malloc
. A função deve retornar um ponteiro paravoid
e aceitar um parâmetro de tipo integral não assinado.Para detectar
free()
, verificamos funções globais nomeadasfree
oustd::free
que 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);
}
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de