Partager via


C6384

Avertissement C6384 : Division d'un pointeur avec opérateur sizeof par une autre valeur

Cet avertissement indique qu'un calcul de taille peut être incorrect.Pour calculer le nombre d'éléments contenus dans un tableau, on divise parfois la taille du tableau par la taille du premier élément ; toutefois, lorsque le tableau est en réalité un pointeur, le résultat ne correspond pas généralement au résultat prévu.

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 fournie dans l'allocation doit être utilisée.

Exemple

Le code suivant génère cet avertissement :

#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, passez 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 de chaîne sécurisée _tcsncpy_s, utilisez le code suivant :

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

Vous pouvez remarquer que l'utilisation de new et de delete présente de nombreux pièges en terme de fuites de mémoire et d'exceptions.Pour éviter complètement ce genre de problème de fuites et d'exception, utilisez les mécanismes fournis par la bibliothèque de modèles standard (STL) C++.Ceux-ci incluent shared_ptr, unique_ptr, et vector.Pour plus d’informations, consultez Pointeurs intelligents (Modern C++) et Référence de bibliothèque standard C++.

Voir aussi

Référence

_mbsnbcpy_s, _mbsnbcpy_s_l

sizeof, opérateur