删除阵列可以说,我分配整数从偏移
int test[] = new int[100];
我一个指针指向中间的某个位置
int *temp = &test[50];
然后我请删除[]中的临时的阵列
delete[] temp
在这种情况下,编译器将如何知道要删除的元素的大小?
删除阵列可以说,我分配整数从偏移
int test[] = new int[100];
我一个指针指向中间的某个位置
int *temp = &test[50];
然后我请删除[]中的临时的阵列
delete[] temp
在这种情况下,编译器将如何知道要删除的元素的大小?
它不会(或不会,我不知道)。您正在调用未定义的行为。只允许您使用拨号为new[]
的指针拨打delete[]
。
例如,我遇到了MSVS崩溃。
你必须通过new[]
返回的相同的内存位置,传递任何其他的是未定义的行为。
你不能那样做。编译器必须跟踪它分配的内存大小。该标准没有说明它如何做到这一点。一些编译器在返回地址之前存储分配内存的大小。在这种情况下,你正在做的事情会导致未定义的行为。
答案是否定的。 因为删除操作符需要定位内存块的位置和它的大小,它大多在分配数组的第一个成员之前。 你应该看看“内部C++对象模型”
“如何将编译器知道元素的大小在这种情况下删除?“ - “答案是否定的”:) –
感谢Inside C++提及:) – Makubex
你能解释一下在你想这样做的情况下? –
如果您试图缩小阵列,则不能这样做。如果您需要调整大小,请使用'std :: vector'。 – molbdnilo
我在想,如果我有一个大阵,并迅速释放一些空间需要 - 这将有可能只是免费不必要的东西,而不是使副本,并释放原... – Makubex