Freigeben über


C6384

Warnung C6384: sizeof eines Zeigers wird durch einen anderen Wert dividiert

Diese Warnung gibt an, dass die Berechnung einer Größe möglicherweise nicht korrekt ist.Um die Anzahl der Elemente in einem Array zu berechnen, wird manchmal die Größe des Arrays durch die Größe des ersten Elements dividiert; wenn es sich bei dem Array jedoch um einen Zeiger handelt, ist das Ergebnis i. d. R. anders als beabsichtigt.

Ist der Zeiger ein Funktionsparameter und wurde die Größe des Puffers nicht übergeben, kann der maximal verfügbare Puffer nicht berechnet werden.Wenn der Zeiger lokal zugeordnet ist, sollte die in der Reservierung verwendete Größe verwendet werden.

Beispiel

Der folgende Code generiert diese Warnung:

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

Um diese Warnung zu korrigieren, übergeben Sie die Puffergröße, wie im folgenden Code dargestellt:

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

Im folgenden Code wird veranschaulicht, wie die Warnung mithilfe der sicheren Zeichenfolgenfunktion, _tcsncpy_s, korrigiert wird:

void f( )
{
  LPTSTR dest = new TCHAR[SIZE];
  char src [SIZE] = "Hello, World!!";
  if (dest)
  {
   _tcsncpy_s(dest, SIZE, src, SIZE);
  }
} 

Siehe auch

Referenz

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof Operator