C6384
Aviso C6384: sizeof um ponteiro de divisão por outro valor
Este aviso indica que um cálculo de tamanho pode estar incorreto. Para calcular o número de elementos em uma matriz, um divide às vezes o tamanho da matriz pelo tamanho do primeiro elemento; No entanto, quando o array é realmente um ponteiro, o resultado é normalmente diferente do que se destina.
Se o ponteiro é um parâmetro de função e o tamanho do buffer não foi aprovado, não é possível calcular o máximo de buffer disponível. Quando o ponteiro é alocado localmente, o tamanho usado na alocação deve ser usado.
Exemplo
O código a seguir gera este aviso:
#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 corrigir esse aviso, passe o tamanho do buffer, conforme mostrado no código a seguir:
#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 corrigir esse aviso usando o _tcsncpy_s de função de cadeia de caracteres seguras, use o seguinte código:
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy_s(dest, SIZE, src, SIZE);
}
}