C6388

警告 C6388:<argument> 不能是 <value>:这不符合函数 <function name> 的规范:行: x, y

此警告意味着在指定的上下文中使用了意外的值。通常,如果将值作为参数传递到不接受它的函数,则会报告此警告。

示例

在下面的 C++ 代码中,因为 DoSomething 接受 null 值,但是传递的可能是非 null 值,所以会生成此警告:

#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);
}

若要更正此警告,请使用下面的代码示例:

#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);
    }
}

就内存泄露以及内存异常而言,注意malloc 与 free 方法存在许多陷阱.若要完全避免这些泄漏和异常问题,请使用 C++ 标准模板库 (STL) 提供的结构。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)C++ 标准库参考