Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Избегайте и предпочитайте
malloc()версиюfree()nothrowсnew(r.10)delete
Этот флаг предупреждения указывает, где 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);
}