C6280

警告 C6280:<variable> 使用 <function> 分配,但使用 <function> 删除

此警告意味着调用函数存在下面的不一致现象:它使用一个内存分配系列中的某个函数分配内存,但却用另一个内存分配系列中的函数释放内存。

例如,如果使用 malloc 分配内存,但却用 GlobalFree 或 delete 释放内存,则将生成此警告。 请注意,在数组 new[] 与标量 delete 之间(或者反过来)存在不匹配的特定情况下,将报告更准确的警告。

示例

下面的代码示例生成此警告:

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

若要更正此警告,请使用下面的代码示例:

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

不同的 API 定义可以使用不同的堆。 例如,GlobalAlloc 使用系统堆,free 使用 C 堆。 此缺陷有可能导致内存损坏和系统崩溃。

请参见

参考

calloc

malloc

free

operator new (<new>)

delete Operator (C++)