'variable-name' 使用数组 new [] 分配,但使用标量 delete 删除
此警告仅在 C++ 代码中出现,并指示调用函数与数组 new [] 运算符分配内存不一致,但用标量 delete 运算符释放该内存。
通知
Visual Studio 2026 中删除了警告 C6283。 请改用更通用的警告 C26865 。
注解
此警告仅在 C++ 代码中出现,并指示调用函数与数组 new [] 运算符分配内存不一致,但用标量 delete 运算符释放该内存。
此缺陷可能会导致泄漏、内存损坏,并在运算符被重写的情况下崩溃。 如果内存使用数组 new [] 进行分配,则通常应使用数组 delete[] 释放内存。
警告 C6283 仅适用于基元类型的数组,例如整数或字符。 如果数组的元素是类类型的对象,则会发出警告 C6278。
new 和 delete 的使用在内存泄漏和异常方面有许多缺陷。 若要完全避免这些潜在的泄露问题,请使用 C++ 标准库 (STL) 提供的机制。 其中包括 shared_ptr、unique_ptr 和容器(例如 vector)。 有关详细信息,请参阅智能指针和 C++ 标准库。
代码分析名称:PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH
示例
下面的代码生成警告 C6283。
str 使用 new ...[...] 分配,但使用不匹配的函数释放 delete:
void f( )
{
char *str = new char[50];
delete str;
}
以下代码使用匹配函数 delete[] 修正此警告:
void f( )
{
char *str = new char[50];
delete[] str;
}