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_sde 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 newdelete 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_ptret des conteneurs tels que vector. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.

Voir aussi

_mbsnbcpy_s, _mbsnbcpy_s_l
sizeof (opérateur)