C6384C6384

avertissement C6384 : division sizeof un pointeur par une autre valeurwarning C6384: dividing sizeof a pointer by another value

Cet avertissement indique qu’un calcul de taille peut être incorrect.This warning indicates that a size calculation might be incorrect. Pour calculer le nombre d’éléments 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 est généralement différent que prévu.To calculate the number of elements in an array, one sometimes divides the size of the array by the size of the first element; however, when the array is actually a pointer, the result is typically different than intended.

Si le pointeur est un paramètre de fonction et 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.If the pointer is a function parameter and the size of the buffer was not passed, it is not possible to calculate the maximum buffer available. Quand le pointeur est alloué localement, la taille utilisée dans l’allocation doit être utilisée.When the pointer is allocated locally, the size used in the allocation should be used.

ExempleExample

Le code suivant génère cet avertissement :The following code generates this warning:

#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 mémoire tampon, comme indiqué dans le code suivant :To correct this warning, pass the buffer size as shown in the following code:

#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 _tcsncpy_s de fonction de chaîne sécurisée, utilisez le code suivant :To correct this warning using the safe string function _tcsncpy_s, use the following code:

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

Notez que l’utilisation de nouveau et delete ont de nombreuses pièges en termes de fuites de mémoire et des exceptions.Note that the use of new and delete have many pitfalls in terms of memory leaks and exceptions. Pour éviter ces types de fuites et totalement de problèmes d’exception, utilisez les mécanismes fournis par la bibliothèque STL (C++ Standard Template Library).To avoid these kinds of leaks and exception problems altogether, use the mechanisms that are provided by the C++ Standard Template Library (STL). Ceux-ci incluent shared_ptr, unique_ptr, et vecteur.These include shared_ptr, unique_ptr, and vector. Pour plus d’informations, consultez pointeurs intelligents et bibliothèque Standard C++.For more information, see Smart Pointers and C++ Standard Library.

Voir aussiSee Also

_mbsnbcpy_s, _mbsnbcpy_s_l sizeof, opérateur_mbsnbcpy_s, _mbsnbcpy_s_l sizeof Operator