增加指针时删除数组指针c ++?

时间:2015-11-20 12:07:11

标签: c++ pointers

我有:

int *ptr = new int[8];
delete[] ptr;  //  it ok, all ptr is delete;

但如果我有:

int *ptr = new int[8];
ptr++; 
delete[] ptr;

我的问题:

delete[]是否会将所有ptrptr[0]删除到ptr[7]或从ptr[1]删除到ptr[7]? 并且,如果它从ptr[1]删除到ptr[7],那么delete[]如何知道要删除的实际尺寸?

1 个答案:

答案 0 :(得分:18)

既不;它是未定义的行为,通常意味着它会使程序崩溃。

您传递给delete[]的指针必须是之前从new[]返回的指针。没有例外*。 new[]返回指向数组第一个元素的指针,因此必须将指向数组第一个元素的指针传递给delete[]

*唯一的例外是你可以传递一个NULL指针,在这种情况下它什么都不做。