Предупреждение C26408
Избегайте и предпочитайте
malloc()
версиюnew
nothrow
сdelete
(r.10)free()
Этот флаг предупреждения указывает, где malloc
или free
вызывается явным образом в соответствии с R.10: избегайте malloc
и free
. Одним из возможных исправлений таких предупреждений будет использование std::make_unique , чтобы избежать явного создания и уничтожения объектов. Если такое исправление неприемлемо, следует предпочтительнее использовать новый оператор и удаление . В некоторых случаях, если исключения не приветствуются, malloc
их free
можно заменить на версию операторов new
nothrow и delete
.
Замечания
Чтобы обнаружить
malloc()
, мы проверяем, вызывает ли вызов глобальную функцию с именемmalloc
илиstd::malloc
. Функция должна возвращать указательvoid
и принимать один параметр целочисленного типа без знака.Для обнаружения
free()
мы проверяем глобальные функции с именемfree
илиstd::free
не возвращаем результат и принимаем один параметр, который является указателем наvoid
.
Имя анализа кода: NO_MALLOC_FREE
См. также
Основные рекомендации C++ R.10
Пример
#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);
}