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

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

something = buffer;
buffer = NULL;

delete [] something; // undefined??

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

解决方法

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

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

delete[] buffer

要么

delete[] (char*)something

两者都有效.

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