Partager via


C6280

Avertissement C6280 : <variable> est alloué avec <fonction>, mais supprimée avec <fonction>

Cet avertissement indique que la fonction d'appel a alloué de façon incohérente de la mémoire avec une fonction appartenant à une famille d'allocation de mémoire et l'a libérée avec une fonction d'une autre famille d'allocation de mémoire.

Par exemple, il se produit si la mémoire est allouée avec malloc mais libérée avec GlobalFree ou delete. Notez que dans les cas spécifiques d'incompatibilités entre un tableau new[] et une variable scalaire delete (ou vice-versa), des avertissements plus précis s'affichent à la place.

Exemple

L'exemple de code suivant génère cet avertissement :

#include <stdlib.h>
void f(int arraySize)
{
  int *pInt;
  
  pInt = (int *)calloc(arraySize, sizeof (int));
  // code ...
  delete pInt;
}

Pour corriger cet avertissement, utilisez l'exemple de code suivant :

#include <stdlib.h>
void f(int arraySize)
{
  int *pInt;
  
  pInt = (int *)calloc(arraySize, sizeof (int));
  // code ...
  free(pInt);
}

Différentes définitions API peuvent utiliser différents tas. Par exemple, GlobalAlloc utilise le tas système, et free utilise le tas C. Ce défaut risque de provoquer des altérations de la mémoire et des pannes.

Voir aussi

Référence

calloc

malloc

free

operator new (<new>)

delete Operator (C++)