【发布时间】:2015-02-24 00:36:16
【问题描述】:
这里是代码
int *p = new int[10];
...
delete[] p;
调用 delete[] 时程序如何知道有多少元素?
假设我们在中间插入了以下代码:
p++;
程序会尝试再释放一个元素吗?它会在第 10 个元素处停止吗?
【问题讨论】:
-
你会有未定义的行为,因为
p不再是new[]返回的指针。这将是糟糕。 -
它是实现定义的,但通常一个秘密整数存储在内存中包含其大小的数组之前。
-
与 both 问题密切相关,How does
delete[]know it's an array。
标签: c++ memory-management delete-operator