C6384
Ostrzeżenie C6384: dzielenie sizeof wskaźnik przez inną wartość
To ostrzeżenie wskazuje, że obliczenie wielkości mogą być niepoprawne.Aby obliczyć liczbę elementów w tablicy, jeden czasami dzieli rozmiar tablicy przez rozmiar pierwszego elementu; Jednakże gdy tablica jest rzeczywiście wskaźnik, wynik jest zazwyczaj inny, niż przeznaczone.
Jeżeli wskaźnik jest parametr funkcji i rozmiar buforu nie została przekazana, nie jest możliwe obliczenie maksymalnej buforu dostępne.Gdy wskaźnik jest przydzielany lokalnie, użyty w alokacji rozmiar powinna służyć.
Przykład
Poniższy kod generuje ostrzeżenie to:
#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]);
}
}
Aby skorygować to ostrzeżenie, przekazać rozmiar buforu, jak pokazano w poniższym kodzie:
#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);
}
}
Aby poprawić to ostrzeżenie przy użyciu bezpiecznego ciąg _tcsncpy_s funkcji, należy użyć następującego kodu:
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy_s(dest, SIZE, src, SIZE);
}
}