有没有办法在C ++中获取动态分配的数组的长度?

时间:2011-09-20 11:36:11

标签: c++ delete-operator

  

可能重复:
  Is there any way to determine the size of a C++ array programmatically? And if not, why?

我可以在C ++中获取动态分配数组的长度,如果没有,C ++的delete运算符如何知道要释放多少元素。

我搜索了论坛,发现对于动态分配的数组,长度存储在数组头部或其他地方之前的四个字节中。我怎样才能获得这个价值?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

总之,你不能。这是实现定义的,因此您无法访问它。但是,您可以(并且必须)将其存储在变量中,或使用控制大小的某些类型,例如std::vectorstd::string等。

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

答案 2 :(得分:1)

你做不到。但是,std::vector<T> v(N)new T[N]几乎完全相同,并提供v.size(),因此您应该真正使用它,除非您有一个很好的理由要使用手动数组。

答案 3 :(得分:0)

另一个选择是定义你自己的分配器(重载operator new []和delete []用于你关心或做的任何类 #define malloc mymalloc #define free myfree 取决于你的情况)。你存储阵列长度的地方取决于你,但通常会在数组开始之前分配额外的字节(无论数量是内存对齐的适当数量 - 通常是4,8或16)并存储长度。