警告 C6388

'argument' は 'value' ではない可能性があります。これは、関数 'function-name' の仕様に準拠していません:行: x、y

解説

この警告は、指定されたコンテキストで予期しない値が使用されていることを示します。 通常、この警告は、予期しない関数に引数として渡される値に対して報告されます。

コード分析名: INVALID_PARAM_VALUE_2

次のコードでは警告 C6388 が生成されます。NULL 値が予期されますが、null 以外の値が渡される可能性があるため DoSomething です。

// C6388_warning.cpp
#include <string.h>
#include <malloc.h>
#include <sal.h>

void DoSomething( _Pre_ _Null_ void* pReserved );

void f()
{
    void* p = malloc( 10 );
    DoSomething( p );  // Warning C6388
    // code...
    free(p);
}

この警告を解決するには、次のサンプル コードを使用します。

// C6388_no_warning.cpp
#include <string.h>
#include <malloc.h>
#include <sal.h>

void DoSomething( _Pre_ _Null_ void* pReserved );
void f()
{
    void* p = malloc( 10 );
    if (!p)
    {
        DoSomething( p );
    }
    else
    {
        // code...
        free(p);
    }
}

メモリ リークとfree例外のmalloc観点から、多くの落とし穴があり、使用されます。 これらのリークと例外の問題を完全に回避するには、C++ の標準ライブラリ (STL) によって提供される機構を使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。