Compartir a través de


C6384

Advertencia C6384: Dividiendo el tamaño de (sizeof) 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, en ocasiones se divide el tamaño de la matriz por el tamaño del primer elemento; sin embargo, cuando la matriz en realidad es un puntero, el resultado suele ser distinto de lo esperado.

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

Ejemplo

El código siguiente genera esta advertencia:

#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 de cadenas de caracteres segura _tcsncpy_s, utilice el código siguiente:

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

Tenga en cuenta que el uso de las opciones new y delete tiene muchos riesgos en cuanto a pérdidas de memoria y excepciones.Para evitar todos estos tipos de problemas de pérdidas de memoria y excepciones, use los mecanismos proporcionados por la Biblioteca de plantillas estándar (STL) de C++.Estos incluyen shared_ptr, unique_ptr y vector.Para obtener más información, vea Punteros inteligentes (C++ moderno) y Referencia de biblioteca estándar de C++.

Vea también

Referencia

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof (Operador)