Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Избегайте и предпочитайте
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);
}