c++获取动态申请的数组空间的大小
c++中经常会使用new动态申请数组空间,但是获取空间大小并不方便
一般获取静态数组大小使用
sizeof(array)/sizeof(array[0])
但是对于动态申请的数组空间,这个方法并不适用:
int *a=new int[10];
cout<<sizeof(a)/sizeof(a[0]);
输出为:
1
结果并非预想的10
搜索后发现函数_msize()
int *a=new int[10];
cout<<_msize(a)/sizeof(a[0]);
运行结果:
10
为方便调用,可以写一个模板函数:
template<class T>
int getLength(T& array) {
return _msize(array) / sizeof(T);
}
也可以定义一个带参数的宏
#include <iostream>
using namespace std;
#define GET_DYNAMIC_ARRAY_LEN(array,len) {len =_msize(array) / sizeof(array[0]);}
int main() {
int* a = new int[100];
int len;
GET_DYNAMIC_ARRAY_LEN(a, len);
cout << len;
}
运行结果:
100
但要注意,传入的指针必须非空,否则会报错。此外,该方法不适用于获取静态数组大小,也会报错
参考链接:
_msize() 返回 new 分配内存的大小_hongye_05的博客-优快云博客
C++学习笔记之如何获取指针开辟空间或数组空间的大小以及_countof、sizeof、strlen、_Msize的区别_jumul的博客-优快云博客_c++获取指针内存大小