c – 删除char数组时的未定义行为
发布时间:2020-12-16 03:41:23 所属栏目:百科 来源:网络整理
导读:以下是否会产生未定义的行为: void * something = NULL;char * buffer = new char[10];something = buffer;buffer = NULL;delete [] something; // undefined?? 我是否首先需要将某些东西投射到char *? 解决方法 是的,严格地说,当你使用delete []时,你删除
以下是否会产生未定义的行为:
void * something = NULL; char * buffer = new char[10]; something = buffer; buffer = NULL; delete [] something; // undefined?? 我是否首先需要将某些东西投射到char *? 解决方法
是的,严格地说,当你使用delete []时,你删除的指针的静态类型[]必须与你最初分配的数组的类型匹配,否则你会得到未定义的行为.
通常,在许多实现中,对void *调用的delete []实际上是一个没有非平凡析构函数的类型的数组,但是不能保证. delete[] buffer 要么 delete[] (char*)something 两者都有效. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |