Share via


警告 C26408

を使用して free()(r.10) のdeletenewバージョンをnothrow優先malloc()します。

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

解説

  • 検出malloc()するには、呼び出しによってグローバル関数がmalloc呼び出されたかどうかをチェックしますstd::malloc。 この関数は void へのポインターを返し、符号なしの整数型の 1 つのパラメーターを受け入れる必要があります。

  • 検出free()するには、名前付きのfreeグローバル関数をチェックするかstd::free、結果を返さず、1 つのパラメーターを受け入れます。これはポインターvoidです。

コード分析名: 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);
}