c – 删除char数组时的未定义行为

前端之家收集整理的这篇文章主要介绍了c – 删除char数组时的未定义行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是否会产生未定义的行为: @H_502_2@void * something = NULL; char * buffer = new char[10]; something = buffer; buffer = NULL; delete [] something; // undefined??

我是否首先需要将某些东西投射到char *?

解决方法

是的,严格地说,当你使用delete []时,你删除的指针的静态类型[]必须与你最初分配的数组的类型匹配,否则你会得到未定义的行为.

通常,在许多实现中,对void *调用的delete []实际上是一个没有非平凡析构函数的类型的数组,但是不能保证.

@H_502_2@delete[] buffer

要么

@H_502_2@delete[] (char*)something

两者都有效.

原文链接:https://www.f2er.com/c/110578.html

猜你在找的C&C++相关文章