为什么不能以这种方式获得分配的缓冲区长度。
AType * pArr = new AType[nVariable];
释放同一数组时
delete [] pArr;
运行时必须知道要解除分配多少。在删除数组之前,是否有任何访问长度的方法。如果没有,为什么没有提供获取长度的API?
delete
操作符不需要知道释放分配内存的大小,就像free
系统调用不需要知道一样。这是因为问题留给操作系统,而不是编译器运行时系统。
运行时不知道分配了多少。然而,这些细节是特定于编译器的,所以您没有任何跨平台的方法来处理它。
如果您想要相同的功能并能够跟踪大小,您可以使用d::向量如下:
std::vector< AType > pArr( nVariable );
这还具有使用RAII的附加优势。
在删除数组之前,是否有方法访问长度?
不,没有办法确定
本标准不要求实现记住并提供通过new
请求的元素数量的详细信息
实现可能只是在分配的内存块末尾插入特定的位模式,而不是记住元素的数量,并且可能只是在释放内存时查找模式<简言之,这只是一个细节。
另一方面,有两种选择可以实际克服这个问题:
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进行