当前位置: 首页 > 知识库问答 >
问题:

查找动态分配数组的大小

秦晋
2023-03-14

为什么不能以这种方式获得分配的缓冲区长度。

AType * pArr = new AType[nVariable];

释放同一数组时

delete [] pArr;

运行时必须知道要解除分配多少。在删除数组之前,是否有任何访问长度的方法。如果没有,为什么没有提供获取长度的API?

共有3个答案

何向荣
2023-03-14

delete操作符不需要知道释放分配内存的大小,就像free系统调用不需要知道一样。这是因为问题留给操作系统,而不是编译器运行时系统。

锺离良哲
2023-03-14

运行时不知道分配了多少。然而,这些细节是特定于编译器的,所以您没有任何跨平台的方法来处理它。

如果您想要相同的功能并能够跟踪大小,您可以使用d::向量如下:

std::vector< AType > pArr( nVariable );

这还具有使用RAII的附加优势。

孔俊友
2023-03-14

在删除数组之前,是否有方法访问长度?

不,没有办法确定
本标准不要求实现记住并提供通过new请求的元素数量的详细信息
实现可能只是在分配的内存块末尾插入特定的位模式,而不是记住元素的数量,并且可能只是在释放内存时查找模式<简言之,这只是一个细节。

另一方面,有两种选择可以实际克服这个问题:

  1. 您可以简单地使用std::vector,它提供了size()

new至少根据您的请求分配足够的内存
您已经知道需要多少内存,因此可以轻松计算长度。您可以使用sizeof查找每个项目的大小。

Total memory requested / Memory required for 1 item = No of Items
 类似资料:
  • 问题内容: 我可以以某种方式告诉array.contains()方法不区分大小写吗? 问题答案: 只需检查列表中是否存在对象。因此,您不能在此处进行不区分大小写的查找,因为“三”与“三”是不同的对象。 解决此问题的简单方法是 然后 Java 8+版本:

  • 问题内容: 我有一个类-xClass,我想将其加载到xClass数组中,所以我声明了: 但是,我不知道是否需要10。为此,我可能需要8或12或任何其他数字。我要等到运行时才能知道。我可以即时更改数组中元素的数量吗?如果是这样,怎么办? 问题答案: 不,一旦创建,就无法更改数组的大小。你要么必须分配比你认为需要的更大的大小,要么接受必须重新分配它的开销,这需要增加它的大小。这样做时,你将不得不分配一

  • 问题内容: 我有以下数据按player_id和match_date排序。我想找出连续运行次数最多的记录组(从2014-04-03到2014-04-12连续3次运行4次) 我想出了以下SQL: 但这 延续 了之前连续运行的排名(由于玩家1已经出现3次,因此在2014-04-19进行的4次针对Player 1的排名预计为1,但排名为4)。同样,在2014-04-19上,玩家2的23奔跑有望获得等级1,

  • 本文向大家介绍C++中关于[]静态数组和new分配的动态数组的区别分析,包括了C++中关于[]静态数组和new分配的动态数组的区别分析的使用技巧和注意事项,需要的朋友参考一下 本文以实例分析了C++语言中关于[]静态数组和new分配的动态数组的区别,可以帮助大家加深对C++语言数组的理解。具体区别如下: 一、对静态数组名进行sizeof运算时,结果是整个数组占用空间的大小; 因此可以用sizeof

  • 有序数组的查找 题目描述 给定一个有序的数组,查找某个数是否在数组中,请编程实现。 分析与解法 一看到数组本身已经有序,我想你可能反应出了要用二分查找,毕竟二分查找的适用条件就是有序的。那什么是二分查找呢? 二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。其算法流程如下: 一开始,范围覆盖整个数组。 将数组的中间项与T进行