前端之家收集整理的这篇文章主要介绍了
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