使用堆分配数组的常见方法是:
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/