gpt4 book ai didi

c++ - delete[]指针起作用的时候,为什么获取不到指向的数组的大小呢?

转载 作者:可可西里 更新时间:2023-11-01 16:39:47 25 4
gpt4 key购买 nike

使用堆分配数组的常见方法是:

SomeType * arr = new SomeType[15454];
//... somewhere else
delete [] arr;

为了执行 delete [] arr,C 运行时必须知道与指针关联的内存缓冲区的长度。我说得对吗?

那么原则上应该可以以某种方式访问​​信息?可以使用某些库访问它吗?我是在想。我知道它不是语言的核心部分,因此它会依赖于平台。

最佳答案

你没看错。信息就在那里。但是没有获得它的标准方法。

如果您使用的是 Windows,则有一个 _msize() 方法,它可能会为您提供内存块的大小,但不一定准确。 (报告的内存块大小可能会四舍五入到最接近的较大对齐点。)参见 MSDN - _msize

如果这确实是您必须拥有的东西,您可以通过覆盖 new 来试试运气,分配一个稍大的内存块,将其大小存储在开头,并返回一个指向字节的指针大小之后。然后您可以编写自己的 msize() 来返回该大小。当然,您还需要覆盖 delete。但是太麻烦了,能避免最好避免。如果你那样走,你只会发现痛苦。

关于c++ - delete[]指针起作用的时候,为什么获取不到指向的数组的大小呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45503969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com