Freigeben über


Warnung C6384

Dividieren der Größe eines Zeigers durch einen anderen Wert

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, dividieren Sie manchmal die Größe des Arrays durch die Größe des ersten Elements. Wenn das Array jedoch tatsächlich ein Zeiger ist, unterscheidet sich das Ergebnis in der Regel von der beabsichtigten.

Hinweise

Wenn der Zeiger ein Funktionsparameter ist und die Größe des Puffers nicht übergeben wurde, ist es nicht möglich, den verfügbaren maximalen Puffer zu berechnen. Wenn der Zeiger lokal zugeordnet ist, sollte die in der Reservierung verwendete Größe verwendet werden.

Codeanalysename: DIVIDING_SIZEOF_POINTER

Beispiel

Der folgende Code generiert warnung C6384:

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

Verwenden Sie den folgenden Code, um diese Warnung mithilfe der Funktion _tcsncpy_s"Sichere Zeichenfolge" zu korrigieren:

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

Die Verwendung von new und delete hat viele Fallstricke in Bezug auf Speicherlecks und Ausnahmen. Um diese Arten potenzieller Lecks vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden. Dazu gehören shared_ptr, , unique_ptrund Container wie vector. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.

Siehe auch

_mbsnbcpy_s, _mbsnbcpy_s_l
sizeof-Operator