警告 C6283

'variable-name' 使用数组 new [] 分配,但使用标量 delete 删除

此警告仅在 C++ 代码中出现,并指示调用函数与数组 new [] 运算符分配内存不一致,但用标量 delete 运算符释放该内存。

通知

Visual Studio 2026 中删除了警告 C6283。 请改用更通用的警告 C26865

注解

此警告仅在 C++ 代码中出现,并指示调用函数与数组 new [] 运算符分配内存不一致,但用标量 delete 运算符释放该内存。

此缺陷可能会导致泄漏、内存损坏,并在运算符被重写的情况下崩溃。 如果内存使用数组 new [] 进行分配,则通常应使用数组 delete[] 释放内存。

警告 C6283 仅适用于基元类型的数组,例如整数或字符。 如果数组的元素是类类型的对象,则会发出警告 C6278

newdelete 的使用在内存泄漏和异常方面有许多缺陷。 若要完全避免这些潜在的泄露问题,请使用 C++ 标准库 (STL) 提供的机制。 其中包括 shared_ptrunique_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;
}