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