首页 >后端开发 >C++ >在 C 中使用'delete[]”删除'void*”指针安全吗?

在 C 中使用'delete[]”删除'void*”指针安全吗?

DDD
DDD原创
2024-12-05 15:00:18933浏览

Is Deleting a `void*` Pointer with `delete[]` Safe in C  ?

删除空指针:安全评估

考虑以下代码片段:

void* my_alloc(size_t size) {
  return new char[size];
}

void my_free(void* ptr) {
  delete[] ptr;
}

删除分配为空指针的指针是否安全void* 使用删除[]运算符?

答案:

C 标准明确未定义通过 void* 删除指针。第 5.3.5/3 节规定:

在第一种选择(删除对象)中,如果操作数的静态类型与其动态类型不同,则静态类型应是操作数动态类型的基类并且静态类型应具有虚拟析构函数,否则行为未定义。在第二种选择(删除数组)中,如果要删除的对象的动态类型与其静态类型不同,则行为未定义。

此外,脚注指出:

这意味着不能使用 void* 类型的指针删除对象,因为不存在类型的对象void.

结论:

使用delete[]运算符删除分配为void*的指针是不安全的。在删除之前始终将指针转换为其原始类型。

以上是在 C 中使用'delete[]”删除'void*”指针安全吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn