有没有任何方法可以在C++中获得动态分配的数组的长度

Is there any way to get the length of an dynamically allocated array in C++?

本文关键字:动态分配 数组 方法 任何 C++ 有没有      更新时间:2023-10-16

可能重复:
有没有任何方法可以通过编程来确定C++数组的大小?如果没有,为什么?

我能在C++中得到一个动态分配数组的长度吗?如果不能,C++的delete操作符如何知道要释放多少元素

我搜索了论坛,发现对于动态分配的数组,长度存储在数组头之前的四个字节或其他地方。如何获取此值?

头之前的四个字节绝对是不应该使用的实现细节。如果您需要知道数组的大小,请使用std::vector。

简而言之,你做不到。这是实现定义的,所以你不能访问它。但是,你可以(也必须(将它存储在一个变量中,或者使用一些控制大小的类型,如std::vectorstd::string等。

delete[]操作符知道,因为C++库的实现具有该信息,但它对C++程序不可用。在某些实现中,就是这样,它存储在指针的实际地址之前的一些字节中,但同样,您无法知道它。

您不能。然而,std::vector<T> v(N)new T[N]几乎完全相同,并且提供了v.size(),所以您应该真正使用它,除非您有充分的理由想要使用手动数组。

另一个选项是定义您自己的分配器(根据您的情况,为您关心的任何类重载运算符new[]和delete[]或执行#define malloc mymalloc#define free myfree(。存储数组长度的位置由您决定,但通常情况下,您会在数组开始前分配额外的字节(无论多少字节是内存对齐的合适数量,通常为4、8或16(,并将长度存储在那里。