--- title: Warning C26408 ms.date: 07/21/2017 f1_keywords: ["C26408", "NO_MALLOC_FREE"] helpviewer_keywords: ["C26408"] ms.assetid: 55b0706f-1107-41c1-8ad0-c9e1e86a3b8c description: CppCoreCheck rule that enforces C++ Core Guidelines R.10 --- # Warning C26408 > Avoid `malloc()` and `free()`, prefer the `nothrow` version of `new` with `delete` (r.10) This warning flags places where `malloc` or `free` is invoked explicitly in accordance to R.10: Avoid `malloc` and `free`. One potential fix for such warnings would be to use [std::make_unique](../standard-library/memory-functions.md#make_unique) to avoid explicit creation and destruction of objects. If such a fix isn't acceptable, operator [new and delete](../cpp/new-and-delete-operators.md) should be preferred. In some cases, if exceptions aren't welcome, `malloc` and `free` can be replaced with the nothrow version of operators `new` and `delete`. ## Remarks - To detect `malloc()`, we check if a call invokes a global function named `malloc` or `std::malloc`. The function must return a pointer to **`void`** and accept one parameter of unsigned integral type. - To detect `free()`, we check global functions named `free` or `std::free` that return no result and accept one parameter, which is a pointer to **`void`**. Code analysis name: `NO_MALLOC_FREE` ## See also [C++ Core Guidelines R.10](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#r10-avoid-malloc-and-free) ## Example ```cpp #include struct myStruct {}; void function_malloc_free() { myStruct* ms = static_cast(malloc(sizeof(myStruct))); // C26408 free(ms); // C26408 } void function_nothrow_new_delete() { myStruct* ms = new(std::nothrow) myStruct; operator delete (ms, std::nothrow); } ```