警告 C26408
malloc()
とfree()
を避け、delete
(r.10) を使用してnew
のnothrow
バージョンを優先する
この警告フラグは、R.10: Avoid malloc
および free
に従って明示的に malloc
または free
が呼び出される場所を示します。 このような警告の考えられる修正内容の 1 つは、std::make_unique を使用して、オブジェクトの明示的な作成と破棄を回避することです。 このような修正が受け入れられない場合は、演算子 new と delete をお勧めします。 例外が歓迎されない場合は、 malloc
と free
を、 new
および delete
の nothrow バージョンの演算子に置き換えることができます。
解説
malloc()
を検出するために、呼び出しがmalloc
またはstd::malloc
という名前のグローバル関数を呼び出すかどうかを確認します。 この関数はvoid
へのポインターを返し、符号なしの整数型の 1 つのパラメーターを受け入れる必要があります。free()
を検出するために、結果を返さないfree
またはstd::free
という名前のグローバル関数を確認し、void
へのポインターである 1 つのパラメーターを受け取ります。
コード分析名: NO_MALLOC_FREE
関連項目
例
#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);
}