次の方法で共有


警告 C26408

malloc()free()を避け、delete (r.10) を使用してnewnothrowバージョンを優先する

この警告フラグは、R.10: Avoid malloc および free に従って明示的に malloc または free が呼び出される場所を示します。 このような警告の考えられる修正内容の 1 つは、std::make_unique を使用して、オブジェクトの明示的な作成と破棄を回避することです。 このような修正が受け入れられない場合は、演算子 new と delete をお勧めします。 例外が歓迎されない場合は、 mallocfree を、 new および deleteの nothrow バージョンの演算子に置き換えることができます。

解説

  • malloc()を検出するために、呼び出しが malloc または std::malloc という名前のグローバル関数を呼び出すかどうかを確認します。 この関数は void へのポインターを返し、符号なしの整数型の 1 つのパラメーターを受け入れる必要があります。

  • free()を検出するために、結果を返さない free または std::free という名前のグローバル関数を確認し、voidへのポインターである 1 つのパラメーターを受け取ります。

コード分析名: NO_MALLOC_FREE

関連項目

C++ Core Guidelines 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);
}