如何找出动态分配数组的大小(使用 sizeof())? [复制]
Posted
技术标签:
【中文标题】如何找出动态分配数组的大小(使用 sizeof())? [复制]【英文标题】:How to find out what the size of dynamically allocated array is(using sizeof())? [duplicate] 【发布时间】:2015-08-02 18:05:19 【问题描述】:我怎样才能知道动态分配数组的大小? 使用以下方法的普通数组可以正常工作,但我不能对动态分配的数组做同样的事情。请查看并感谢您的帮助。
#include <iostream>
using namespace std;
int main()
//normal array
int array[5];
cout << sizeof(array)/sizeof(array[0]) << endl; //this outputs the correct size
//dynamically allocated array
int *dArray = new int[5];
//how to calculate and output the size here?
return 0;
【问题讨论】:
[这里有一个类似的问题。或者你可以只使用 std::vector。 (:][1] [1]:***.com/questions/2034450/… 【参考方案1】:以可移植的方式(从new
获取真正分配的大小)是不可能的。
您可以考虑定义自己的::operator new
,但我不建议这样做。
您应该使用std::vector 并了解更多有关 C++ 的知识standard containers。
【讨论】:
【参考方案2】:您无法计算动态数组的大小,因此您需要明确提供数组的大小。
#include <iostream>
using namespace std;
int main()
//normal array
int array[5];
cout << sizeof(array)/sizeof(array[0]) << endl; //this outputs the correct size
//dynamically allocated array
int size = 5; // array size
int *dArray = new int[size];
return 0;
【讨论】:
【参考方案3】:它不可能与sizeof
一起工作,因为sizeof
是一个编译时运算符,但您要求的是一个运行时值。 sizeof(dArray)
只是 sizeof(int*)
的语法糖,sizeof(*dArray)
只是 sizeof(int)
的语法糖。两者都是编译时常量。
sizeof(array)
起作用的原因是5
是array
的编译时类型(int[5]
)的一部分。
【讨论】:
以上是关于如何找出动态分配数组的大小(使用 sizeof())? [复制]的主要内容,如果未能解决你的问题,请参考以下文章