37得票5回答
为什么C++分配器中没有重新分配功能?

C 语言中的标准内存处理函数是 malloc()、realloc() 和 free()。然而,C++ 的 stdlib 分配器只并行支持其中两个函数:没有重新分配函数。当然,这并不可能完全像 realloc() 那样做,因为简单地复制内存对于非聚合类型来说是不适当的。但是,使用下面的函数会有问...

34得票4回答
realloc在失败时是否会释放原来的缓冲区?

如果 realloc 失败并返回 NULL,先前的缓冲区是否被释放还是保持不变?我在 man 手册中没有找到这个特定信息,我很不确定该怎么做。如果内存已被释放,则双重释放可能会带来风险。如果没有释放,则会发生泄漏。

31得票3回答
C语言中的动态数组——我的malloc和realloc理解正确吗?

我正在学习如何在C语言中创建动态1D数组。下面的代码试图完成以下操作: 使用malloc创建一个长度为10的动态数组,该数组保存double类型的值。 将数组的每个元素设置为j/100,其中j = 0, 1, ..., 9。然后打印出来。 使用realloc在数组末尾添加一个额外的空条目。...

30得票8回答
realloc和memcpy是如何工作的?

我有两个问题。 realloc() 和 memcpy() 是否以比逐个元素迭代更快的方式复制数组中的条目( O(N))?如果是,则你认为它的复杂度是什么? 如果分配的大小小于原始大小,realloc() 是否会将条目复制到其他位置,还是只是将它们保留在原地并减小数组的大小?

30得票3回答
realloc函数在处理内存不足时的处理方式是如何的?

如果原始位置没有足够的内存可用: 它会分配多个内存块,并返回指向其中一个块的指针,所有块在内部相互链接吗? 原始区域会被复制到一个有足够内存可用的新位置吗? 会返回指向新地址的指针,同时释放旧位置的内存吗? realloc是否与编译器/操作系统相关?

28得票6回答
realloc()的正确使用方法

根据realloc函数的说明:realloc()函数会返回一个指向新分配内存的指针,该内存适合于任何类型的变量,并且可能与ptr不同,如果请求失败,则返回NULL。 因此,在这段代码片段中:ptr = (int *) malloc(sizeof(int)); ptr1 = (int *) r...

25得票8回答
当realloc由于内存问题失败时,如何处理?

问题已经说得很清楚了,这里是一个示例:typedef struct mutable_t{ int count, max; void **data; } mutable_t; void pushMutable(mutable_t *m, void *object) { ...

21得票7回答
对齐内存管理?

我有几个关于管理对齐内存块的问题,希望能得到跨平台的答案。但是,由于我相信跨平台的解决方案并不存在,所以我主要关心Windows和Linux,Mac OS和FreeBSD则次之。 如何最好地获得一个在16字节边界上对齐的内存块?(我知道使用malloc()的简单方法,分配一些额外的空间,然...

20得票5回答
当realloc移动内存块时如何更新其他指针?

realloc函数可能会将内存块移动到新的位置,此时返回新的位置。那么这是否意味着如果我这样做:void foo() { void* ptr = malloc( 1024 ); unsigned char* cptr = ( unsigned char* )...

20得票1回答
realloc()函数是否真的没有支持对齐的版本?

现有许多经过改进的 malloc() 版本,例如:#include <stdlib.h> int posix_memalign(void **memptr, size_t alignment, size_t size); void *aligned_alloc(size_t ali...