我有:
int *ptr = new int[8];
delete[] ptr; // it ok, all ptr is delete;
但如果我有:
int *ptr = new int[8];
ptr++;
delete[] ptr;
我的问题:
delete[]
是否会将所有ptr
从ptr[0]
删除到ptr[7]
或从ptr[1]
删除到ptr[7]
?
并且,如果它从ptr[1]
删除到ptr[7]
,那么delete[]
如何知道要删除的实际尺寸?
答案 0 :(得分:18)
既不;它是未定义的行为,通常意味着它会使程序崩溃。
您传递给delete[]
的指针必须是之前从new[]
返回的指针。没有例外*。 new[]
返回指向数组第一个元素的指针,因此必须将指向数组第一个元素的指针传递给delete[]
。
*唯一的例外是你可以传递一个NULL指针,在这种情况下它什么都不做。