【问题标题】:How to get array size for dynamic created memory如何获取动态创建内存的数组大小
【发布时间】:2009-11-06 15:00:26
【问题描述】:

考虑一个例子:

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

如何知道 arr 的大小?

【问题讨论】:

  • 它在[ 和] 之间这么说。 ;)
  • 要放大思南所说的话,请去掉void main()。它是非标准的并且没有任何用处,除了将使用它的人标记为新手或更糟。如果你从一本书中得到它,那本书是不可信的,所以你应该再买一本书(至少作为参考)。 C 和 C++ 方面的好书使用 int main()。

标签: c++ arrays


【解决方案1】:

您必须自己跟踪它。我建议改用向量或双端队列,让自己的生活更轻松。

【讨论】:

  • cn i knw 矢量....!!!我想知道有多少元素......即10!通过使用代码 hw 我可以得到...
  • “您必须自己跟踪”的哪一部分不清楚?请至少假装努力拼写完整。如今,大多数浏览器都会随时检查拼写。
  • 通过“你必须自己跟踪它”,Fred 的意思是:“你无法知道数组的大小”。该语言不支持您这样做。
  • 你根本做不到。这是 C 和 C++ 中数组的问题之一——它们不知道自己的大小。
  • 我同意大家的看法。此外,OP,元音不需要额外费用!我们不在推特或短信上。请输入你的话,以便我们弄清楚你在说什么。
【解决方案2】:

两种方式(请注意,在第一个 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();
}

【讨论】:

  • @Patrick - 从技术上讲,向量示例中“size”变量的类型应该是“std::vector::size_type”,而不是“int”。 size_type 通常是无符号的。
【解决方案3】:

您的数组大小为 10。

【讨论】:

    【解决方案4】:

    实际上,您可以使用一些静态类方法重载 new 并跟踪分配大小。 尝试检查LeakTracer等工具。

    虽然 LeakTracer 的实现不是那么正确,但它提供了几乎所有你需要的东西,甚至超出了这个。您只需添加静态方法即可通过指针获取分配大小(实现起来并不难,只需修改“删除”处理程序即可)。

    【讨论】:

      【解决方案5】:

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

      Stroustrupp 会告诉您使用容器,这样您在访问它时就不会发生泄漏或缓冲区溢出。

      【讨论】:

      • 您无法以可移植的方式获取已分配内存块的大小,因此该技巧不起作用。它确实适用于int arr[10]; size_t arr_size = sizeof(arr) / sizeof(arr[0]。并且比 Stroustrup 更多的人会说使用向量。
      • 这不适用于动态分配。在最常见的平台上,sizeof(arr) 将始终为 4(32 位构建)或 8(64 位构建),无论数组成员的数量如何。
      【解决方案6】:

      为清楚起见进行编辑:第一部分解释了为什么编辑器更改了他的原始代码

      int arr;
      

      到

      int* arr;
      

      ~~~~~

      当你声明时

      int arr;
      

      您是否将 arr 设为 int。然后它将保存指向您刚刚创建的新数组的指针。但是 arr 的大小仍然是 size_of(int)。
      ~~~~~

      我猜这不是你要问的。您是在问如何知道数组的大小?您必须自己跟踪它。

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

      但正如 Fred 所说,使用其他可以跟踪您的东西很可能会更好。

      【讨论】:

      • 呃...“size_of()”? Ints持有先驱者?这是一个非常令人困惑的答案。
      • size_of(var) 返回传入的变量类型的大小。在这种情况下,(int arr;) arr 是一个 int,其大小为 size_of(int)。不管保存到 arr 中的数字是多少
      猜你喜欢
      • 1970-01-01
      • 2015-04-28
      • 2013-10-22
      • 2012-03-18
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多