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