【问题标题】:Dynamically increase/decrease array size动态增加/减少数组大小
【发布时间】:2013-05-17 09:23:48
【问题描述】:

我正在尝试动态增加数组的大小。是否有任何标准的 C 或 C++ 函数在数组末尾附加额外的空间或删除它? 我知道,这很困难,因为不能保证堆的末端有足够的空间。但这不应该是操作系统的工作吗?

【问题讨论】:

  • 您需要确定您正在使用哪种语言进行编程。在 C 语言中,您将使用 realloc。在 C++ 中,您将使用 std::vector

标签: c arrays size append


【解决方案1】:

您要查找的函数是 C 中的 realloc(),它在 C++ STL 中也以 std::realloc 的形式出现

虽然您提到了 C++,但您也可以选择像 std::vector 这样的标准容器,它封装了相关的内存管理。

【讨论】:

  • 它不会减小大小,是吗
  • 好吧,如果我输入比以前更小的尺寸,它确实会减少。或者这是不可能的?
  • @GrijeshChauhan 您可以指定低于数组旧大小的新大小。 C 标准指定(7.20.3.4)realloc()“释放 ptr 指向的旧对象并返回指向具有 size 指定大小的新对象的指针”,并且新对象的内容相同到 min(oldSize, newSize)。
  • 进一步说明尺寸;如果新大小大于旧大小,则从 realloc() 返回地址的内存
【解决方案2】:

没有这样的 C 函数。你可以去 C++ 容器。这有数组、列表等...

【讨论】:

    【解决方案3】:

    您可能可以通过编写自己的内存管理包装器来实现这一点,这样可以从分配的数组中追加/释放内存块。

    【讨论】:

      【解决方案4】:

      经过教授和工程师等人(在几年内从事实际工作)的大量实验后,在扩展阵列时,将其扩展 50%,除非您有内部信息告诉您不同。 realloc() 也为您完成所有繁重的工作(接下来解释。)来自互联网:--> realloc() 函数更改指向的内存块的大小to by ptr to size 字节。内容将在从区域开始到新旧大小的最小值的范围内保持不变。如果新大小大于旧大小,则不会初始化添加的内存。如果 ptr 为 NULL,则对于所有 size 值,调用等效于 malloc(size);如果 size 等于 0,并且 ptr 不为 NULL,则调用等效于 free(ptr)。除非 ptr 为 NULL,否则它一定是由先前对 malloc()、calloc() 或 realloc() 的调用返回的。如果指向的区域被移动,则执行 free(ptr)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多