Avertissement C6384
Division de la taille d’un pointeur par une autre valeur
Cet avertissement indique qu’un calcul de taille peut être incorrect. Pour calculer le nombre d’éléments d’un tableau, vous divisez parfois la taille du tableau par la taille du premier élément. Toutefois, lorsque le tableau est en fait un pointeur, le résultat est généralement différent de celui prévu.
Notes
Si le pointeur est un paramètre de fonction et que la taille de la mémoire tampon n’a pas été passée, il n’est pas possible de calculer la mémoire tampon maximale disponible. Lorsque le pointeur est alloué localement, la taille utilisée dans l’allocation doit être utilisée.
Nom de l’analyse du code : DIVIDING_SIZEOF_POINTER
Exemple
Le code suivant génère l’avertissement 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]);
}
}
Pour corriger cet avertissement, transmettez la taille de la mémoire tampon, comme indiqué dans le code suivant :
#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);
}
}
Pour corriger cet avertissement à l’aide de la fonction _tcsncpy_s
de chaîne sécurisée, utilisez le code suivant :
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy_s(dest, SIZE, src, SIZE);
}
}
L’utilisation et présente de nombreux pièges en termes de new
delete
fuites de mémoire et d’exceptions. Pour éviter ces types de fuites potentielles, utilisez les mécanismes fournis par la bibliothèque C++ Standard (STL). Ceux-ci incluent shared_ptr
, unique_ptr
et des conteneurs tels que vector
. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.