如何找出动态分配数组的大小(使用 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) 起作用的原因是5array 的编译时类型(int[5])的一部分。

【讨论】:

以上是关于如何找出动态分配数组的大小(使用 sizeof())? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中找到动态分配数组的大小?

C++ 如何从动态分配中获取数组大小?

怎么动态分配指针数组

如何在 C++ 中动态分配数组

sizeof和strlen的区别

sizeof和strlen