如何获取动态创建的内存的数组大小

时间:2009-11-06 15:00:26

标签: c++ arrays

考虑一个例子:

void main()
{
    int *arr;
    arr=new int[10];
}

我怎么知道arr的大小?

6 个答案:

答案 0 :(得分:20)

你必须自己跟踪它。我建议使用vector或deque来让自己的生活更轻松。

答案 1 :(得分:7)

两种方式(请注意,在第一个arr是ptr而不是int):

int main()
{
    const int SIZE = 10;
    int* arr;
    arr = new int[SIZE];

    delete[] arr;
}

或更好:

int main()
{
     std::vector<int> arr( 10 );
     std::size_t size = arr.size();
}

答案 2 :(得分:0)

数组的大小为10。

答案 3 :(得分:0)

在契约中,您可以使用一些静态类方法重载新的和跟踪分配大小。 尝试检查LeakTracer等工具。

虽然LeakTracer不是那么正确的实现工具,它提供了几乎所有你需要的东西,甚至超出了它。你只需要添加静态方法来通过指针获取分配大小(不是很难实现它,只需修改'delete'处理程序)。

答案 4 :(得分:0)

你可以使用sizeof并除以数组存储的大小来获得项目数量吗?类似的东西

Stroustrupp会告诉您使用容器,以便在访问时不会出现泄漏或缓冲区溢出。

答案 5 :(得分:-4)

为清晰起见编辑:第一部分是编辑器改变原始代码的原因

int arr;

int* arr;

~~~~~

宣布

int arr;
你正在做一个int。然后它将指向您刚刚创建的新数组。但是arr的大小仍然是size_of(int) ~~~~~

我猜这不是你问的问题。你问你怎么知道阵列的大小?你必须自己跟踪它。

#define ARR_SIZE 10

void main()
{
  int * arr;
  arr = new int[ARR_SIZE];
}

但正如弗雷德所说,使用跟踪你的其他东西最有可能更好。