有没有任何方法可以在C++中获得动态分配的数组的长度
Is there any way to get the length of an dynamically allocated array in C++?
可能重复:
有没有任何方法可以通过编程来确定C++数组的大小?如果没有,为什么?
我能在C++中得到一个动态分配数组的长度吗?如果不能,C++的delete操作符如何知道要释放多少元素
我搜索了论坛,发现对于动态分配的数组,长度存储在数组头之前的四个字节或其他地方。如何获取此值?
头之前的四个字节绝对是不应该使用的实现细节。如果您需要知道数组的大小,请使用std::vector。
简而言之,你做不到。这是实现定义的,所以你不能访问它。但是,你可以(也必须(将它存储在一个变量中,或者使用一些控制大小的类型,如std::vector
、std::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(,并将长度存储在那里。
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- 动态更改数组的大小并读取值.(无矢量)
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 动态维度数组的 C++ 别名指针
- C++ 在析构函数调用之前删除的动态成员数组
- 从类 c++ 动态创建数组
- 具有静态 std::array 的神经网络比使用动态 C 数组的神经网络慢
- "Error reading character of string" 为哈希动态增长数组的问题 (C++)
- 为什么我们在传递动态 2D 数组时不需要列数?
- 如何解决在使用动态 2D 数组进行矩阵乘法的 MPI 进行并行编程时的问题
- 使用动态布尔数组时出现问题
- C++ 在类中删除动态 2D 数组时不断"Aborted (core dumped)"
- 如何在C 中动态输入数组
- 关于删除动态对象数组
- 在C 中动态更改数组大小
- 使用动态指针数组进行动态对象分配 - 使用什么删除?
- 动态字符串数组分配错误
- 函数中的动态 2D 数组分配并将其返回给主数组
- c++动态字符串数组分配
- 使用字符串或字符动态分配(数组)