C6384
Обновлен: Ноябрь 2007
C6384
Предупреждение C6384. Деление sizeof указателя на другое значение
Данное предупреждение указывает, что вычисление размера может быть неверным. Иногда, чтобы вычислить количество элементов в массиве, размер массива делят на размер первого элемента. Однако, если массив фактически является указателем, результат, как правило, отличается от ожидаемого.
Если указатель является параметром функции и размер буфера не передается, то вычислить максимальный доступный размер буфера не представляется возможным. Если память для указателя выделяется локально, следует использовать размер данного выделения.
Пример
Данное предупреждение создается в следующем коде:
#include <windows.h>
#include <TCHAR.h>
#define SIZE 15
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy(dest, src, sizeof dest / sizeof dest[0]);
}
}
Для устранения этого предупреждения передайте размер буфера, как указано в следующем коде:
#include <windows.h>
#include <TCHAR.h>
#define SIZE 15
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy(dest, src, SIZE);
}
}
Для устранения этого предупреждения с помощью безопасной строковой функции _tcsncpy_s используйте следующий код:
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy_s(dest, SIZE, src, SIZE);
}
}