C6384
Aviso C6384: dividindo um ponteiro sizeof por outro valor
Este aviso indica que um cálculo de dimensionar pode estar incorreto.Para calcular o número de elementos em uma matriz, um às vezes, divide o dimensionar da matriz pelo dimensionar do primeiro elemento; no entanto, quando a matriz é realmente um ponteiro, o resultado é normalmente diferente da pretendida.
Se o ponteiro é um parâmetro de função e o dimensionar do buffer não foi passado, não é possível calcular o buffer máximo disponível.Quando o ponteiro é alocado localmente, o dimensionar 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 dimensionar do buffer sistema autônomo mostra o 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 a seqüência segura função _tcsncpy_s, 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);
}
}