【发布时间】:2015-08-18 17:45:19
【问题描述】:
这看起来很简单的问题,但我的朋友和我争论说下面的程序调用了 UB。但我认为他是不正确的。 考虑以下程序:
#include <iostream>
int main()
{
int* p=new int[3]();
int* q=p;
for(int i=0;i<3;i++)
std::cout<<q[i]<<' ';
delete[] q;
std::cout<<'\n';
}
这个程序的行为是否明确定义?如果我写 delete[] p; 而不是 delete[] q; 会发生什么?有效吗?
【问题讨论】:
-
这里怎么会有UB?
-
注意:delete不是删除指针,而是指针指向的对象(内存)。
-
也许this question 会有所帮助。
-
@PravasiMeet 我想知道你为什么认为可能存在 UB。通常,如果您认为有问题,您有理由这样做。我想知道原因。
标签: c++ arrays variable-assignment delete-operator