Поделиться через


C6388

Предупреждение C6388: <аргумент> может быть неравен <значение>: это не соответствует спецификации функции <имя функции>: строки 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 имеет много опасностей в терминах утечки памяти и исключений.Чтобы избежать все такие проблемы утечек и исключений, используйте механизмы, предоставляемые библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.