Поделиться через


Предупреждение 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);
}