Предупреждение C6384

Деление размера указателя на другое значение

Это предупреждение указывает, что вычисление размера может быть неверным. Чтобы вычислить количество элементов в массиве, иногда можно разделить размер массива на размер первого элемента. Однако, если массив фактически является указателем, результат обычно отличается от предполагаемого.

Замечания

Если указатель является параметром функции, а размер буфера не был передан, вычислить максимальный доступный буфер невозможно. При локальном выделении указателя следует использовать размер, используемый в выделении.

Имя анализа кода: DIVIDING_SIZEOF_POINTER

Пример

Следующий код создает предупреждение C6384:

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

Использование new и delete имеет множество ошибок с точки зрения утечки памяти и исключений. Чтобы избежать таких потенциальных утечек, используйте механизмы, предоставляемые стандартной библиотекой C++ (STL). К ним относятся, например, unique_ptrи контейнеры, такие как.shared_ptrvector Дополнительные сведения см. в разделе "Смарт-указатели " и "Стандартная библиотека C++".

См. также

_mbsnbcpy_s, _mbsnbcpy_s_l
sizeofОператор