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