为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除[]“知道”操作数组的大小?

如何删除[]“知道”操作数组的大小?

C++
RISEBY 2019-06-23 16:51:18
如何删除[]“知道”操作数组的大小?Foo* set = new Foo[100];// ...delete [] set;你不能把数组的边界传递给delete[]..但这些信息储存在哪里?标准化了吗?
查看完整描述

3 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

当您在堆上分配内存时,您的分配程序将跟踪您已分配了多少内存。这通常存储在“Head”段中,就在分配给您的内存之前。这样,当是时候释放内存时,去分配器确切地知道要释放多少内存。


查看完整回答
反对 回复 2019-06-23
?
郎朗坤

TA贡献1921条经验 获得超9个赞

编译器的一种方法是分配更多的内存,并将元素的计数存储在HEAD元素中。

例如,如何做到这一点:

这里

int* i = new int[4];

编译器将分配sizeof(int)*5字节。

int *temp = malloc(sizeof(int)*5)

将“4”存储在第一个sizeof(int)字节

*temp = 4;

并设定i

i = temp + 1;

所以i将指向一个由4个元素组成的数组,而不是5个元素。

和删除

delete[] i;

将以下列方式处理:

int *temp = i - 1;int numbers_of_element = *temp; 
// = 4... call destructor for numbers_of_element elements... that are stored in temp + 1, temp + 2, ... temp + 4 if needed
free (temp)


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 505 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信