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

Posted

技术标签:

【中文标题】C++ 如何从动态分配中获取数组大小?【英文标题】:C++ How to get arraysize from dynamic allocation? 【发布时间】:2016-11-20 00:20:53 【问题描述】:

我声明了int star = new int;,并将值放入star。比如:

int *star = new int;
int i,j = 0;
for (i = 0; i < length; i++)

    if(words[i] == '*')
    
        star[j] = i;
        j++;
    

现在我想知道star 的大小。我尝试了sizeof()_msize(),但它们不起作用,它们只是读取类型的大小。

【问题讨论】:

在此处粘贴代码,而不是图像。 star 不是数组。 【参考方案1】:

star 是一个指向单个整数的指针。所以length 应该是1,由你来设置。 star[0] 可以,但 star[1] 会越界。对了,当你使用动态分配的时候,别忘了在最后加上delete star;

sizeof(star) 会给你指针的大小,而不是分配的元素数量。

如果你想知道动态大小,你必须自己去跟踪它:

size_t length = 15;           // or any number you want
int *star = new int[length];  // this time you've allocated an array
...
delete[] star;                // if you allocate an array, don't forget the []

另一种方法是使用完全动态的vector&lt;int&gt;,可以根据需要增长,并在不再需要时处理释放:

 vector<int> star;  // empty vector created
  ...
      star.push_back(i); // add an element
  ...
  j=star.size();    // in fact you don't need j anymore

您可以像访问数组一样访问成员(例如 star[k])

【讨论】:

没有人知道长度有多长。如果输入为 3,则大小为 3。这就是我想要的,就像 C 中的 malloc 一样。我想做那个函数,那么我是否使用向量?【参考方案2】:

您尚未将 star 声明为数组,而是单个整数。如果这样做的目的是找出“*”在您的文件中出现的次数,您应该创建一个整数int count = 0,并在每次word[i] == '*' 时执行count++;

【讨论】:

那我用什么函数呢?我想在 C 中拥有像 malloc 一样的效果。 我确实喜欢。我想知道如何使用动态分配。

以上是关于C++ 如何从动态分配中获取数组大小?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何获取动态分配的二维数组的大小

C++ shared_ptr 持有动态分配的数组

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

内存堆问题 C++,动态分配多维数组

什么是 C++ 中的动态内存分配?