【发布时间】:2013-05-17 09:23:48
【问题描述】:
我正在尝试动态增加数组的大小。是否有任何标准的 C 或 C++ 函数在数组末尾附加额外的空间或删除它? 我知道,这很困难,因为不能保证堆的末端有足够的空间。但这不应该是操作系统的工作吗?
【问题讨论】:
-
您需要确定您正在使用哪种语言进行编程。在 C 语言中,您将使用
realloc。在 C++ 中,您将使用std::vector。
我正在尝试动态增加数组的大小。是否有任何标准的 C 或 C++ 函数在数组末尾附加额外的空间或删除它? 我知道,这很困难,因为不能保证堆的末端有足够的空间。但这不应该是操作系统的工作吗?
【问题讨论】:
realloc。在 C++ 中,您将使用 std::vector。
您要查找的函数是 C 中的 realloc(),它在 C++ STL 中也以 std::realloc 的形式出现
虽然您提到了 C++,但您也可以选择像 std::vector 这样的标准容器,它封装了相关的内存管理。
【讨论】:
realloc()“释放 ptr 指向的旧对象并返回指向具有 size 指定大小的新对象的指针”,并且新对象的内容相同到 min(oldSize, newSize)。
没有这样的 C 函数。你可以去 C++ 容器。这有数组、列表等...
【讨论】:
您可能可以通过编写自己的内存管理包装器来实现这一点,这样可以从分配的数组中追加/释放内存块。
【讨论】:
经过教授和工程师等人(在几年内从事实际工作)的大量实验后,在扩展阵列时,将其扩展 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)。
【讨论】: