int main(){
int *p=new int[5];
//case 1: delete p;
//case 2: p++;delete[] p;
return 0;
}
如果分别使用案例1和案例2会发生什么?如果我们在增加指针后删除数组会发生什么?
int main(){
int *p=new int[5];
//case 1: delete p;
//case 2: p++;delete[] p;
return 0;
}
如果分别使用案例1和案例2会发生什么?如果我们在增加指针后删除数组会发生什么?
会发生什么
案例1:未定义行为。
p
没有被new
(而是new[]
)调用返回,所以delete p;
是UB。
案例2:未定义的行为。
p+1
没有被new[]
调用返回,所以p++;delete[] p;
是UB。
你可以释放你没有分配的内存。 你必须调用删除同一指针值,你回来使用新
不可以。不确定。它可以释放记忆,它可以做别的事情。 –
我的第二个陈述是正确的。只要将'意志'视为'可能' –
它可能很大程度上取决于您在编译期间使用哪个标志。 – rakwaht
这是未定义的行为。用'new'删除[]',用'new'删除' –