从偏移中删除数组

时间:2012-06-08 07:12:27

标签: c++ delete-operator

假设我分配了一个整数数组

int test[] = new int[100];

我把指针指向中间的某个地方

int *temp = &test[50];

然后我在temp

上调用delete []
delete[] temp

在这种情况下,编译器如何知道要删除的元素的大小?

4 个答案:

答案 0 :(得分:8)

它不会(或将会,我不知道)。您正在调用未定义的行为。您只能在分配了delete[]的指针上调用new[]

例如,我在MSVS中崩溃了。

答案 1 :(得分:3)

必须传递new[]返回的相同内存位置,传递任何其他内容是未定义的行为。

答案 2 :(得分:1)

你做不到。编译器必须跟踪它分配的内存大小。标准没有说明它必须如何。有些编译器会在返回的地址之前存储已分配内存的大小。在这种情况下,您正在做的事情可能会导致未定义的行为。

答案 3 :(得分:1)

答案是否定的。 因为删除操作符需要定位内存块的位置及其大小,这大部分位于分配的数组的第一个成员之前。 你应该看一下“Inside c ++对象模型”