Advertencia C6384

Dividir el tamaño de un puntero por otro valor

Esta advertencia indica que un cálculo de tamaño podría ser incorrecto. Para calcular el número de elementos de una matriz, a veces se divide el tamaño de la matriz por el tamaño del primer elemento. Sin embargo, cuando la matriz es realmente un puntero, el resultado suele ser diferente del previsto.

Comentarios

Si el puntero es un parámetro de función y no se pasó el tamaño del búfer, no es posible calcular el búfer máximo disponible. Cuando el puntero se asigna localmente, se debe utilizar el tamaño usado en la asignación.

Nombre del análisis de código: DIVIDING_SIZEOF_POINTER

Ejemplo

El código siguiente genera la advertencia 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]);
  }
}

Para corregir esta advertencia, pase el tamaño de búfer como se muestra en el siguiente código:

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

Para corregir esta advertencia mediante la función _tcsncpy_sde cadena segura , use el código siguiente:

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
    _tcsncpy_s(dest, SIZE, src, SIZE);
  }
}

El uso de new y delete tiene muchos problemas en términos de fugas de memoria y excepciones. Para evitar estos tipos de posibles fugas por completo, use los mecanismos proporcionados por la biblioteca estándar de C++ (STL). Entre ellos se incluyen shared_ptrlos contenedores , unique_ptry , como vector. Para más información, consulte los artículos sobre punteros inteligentes y la biblioteca estándar de C++.

Consulte también

_mbsnbcpy_s, _mbsnbcpy_s_l
Operador sizeof