从偏移量中删除数组

Delete array from an offset

本文关键字:数组 删除 偏移量      更新时间:2023-10-16

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

int test[] = new int[100];

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

int *temp = &test[50];

然后我临时调用删除[]

delete[] temp

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

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

例如,我在 MSVS 中遇到崩溃。

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

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

答案是否定的。因为删除运算符需要定位内存块的位置及其大小,这主要在分配数组的第一个成员之前。您应该查看"内部 C++ 对象模型"