2013-05-22 71 views
5

我想动态增加数组的大小。是否有任何标准的C或C++函数,它在数组的末尾添加额外的空间或将其删除? 我知道,这很难,因为它不能保证在堆的最后有足够的空间。但是,这不应该是操作系统的工作吗?动态增加/减少数组大小

+1

['void * realloc(void * ptr,size_t size);'](http://www.cplusplus.com/reference/cstdlib/realloc/)在C中的功能 –

+2

您需要下定决心你在用什么语言进行编程。在C中,你会使用'realloc'。在C++中,你会使用'std :: vector'。 –

回答

5

你要找的功能是在C,这也是目前在C++ STL为std::realloc

虽然你提到C++ realloc(),你也可以去像std::vector一个标准的容器,它封装了相关内存管理。

+0

它不会减小尺寸,是吗?** –

+0

好吧,如果我输入比以前更小的尺寸,它确实会减少。或者这是不可能的? –

+1

@GrijeshChauhan您可以指定一个小于数组的旧大小的新大小。 C标准规定(7.20.3.4)'realloc()'“重新分配由ptr指向的旧对象,并返回一个指向size为size指定大小的新对象的指针,并且新对象的内容是一直到min(oldSize,newSize)。 – JBL

0

这里没有C函数。你可以去C++容器。这有阵列,列表等...

0

可能你可以通过编写你自己的内存管理包装这样的方式来实现这个从分配的数组追加/释放内存块的方式。

0

经过诸如教授和工程师(有几年真实工作经验的人)的大量实验后,扩展数组时,除非你有内部信息告诉你不同,否则将其扩大50%。 realloc()为你也做了所有重载(解释见下)。从因特网: - > realloc()函数将ptr指向的内存块的大小更改为字节大小。内容在从区域开始到新旧尺寸的最小范围内保持不变。如果新尺寸大于旧尺寸,则添加的内存不会被初始化。如果ptr为NULL,则对于所有大小的值,调用等价于malloc(size);如果size等于零,并且ptr不为NULL,那么调用等价于free(ptr)。除非ptr为NULL,否则它必须早先通过调用malloc(),calloc()或realloc()返回。如果指向的区域被移动,则完成一个空闲(ptr)。