Udostępnij za pośrednictwem


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

Zobacz też

Informacje

_mbsnbcpy_s, _mbsnbcpy_s_l

Operatora sizeof