我可以 realloc() 未分配的指针吗?

1 c memory memory-management heap-memory realloc

通常,realloc() 用于重新分配先前分配的指针:

int *DynamicArray = malloc(sizeof(int)*SomeArbitraryValue);
// Some rando code where DynamicArray is used
DynamicArray = realloc(DynamicArray, sizeof(int)*SomeOtherArbitraryValue)
Run Code Online (Sandbox Code Playgroud)

但是realloc()可以用来直接分配内存吗?如在

int *DynamicArray = realloc(/*...*/);
Run Code Online (Sandbox Code Playgroud)

realloc() 可以处理非预分配指针吗?

小智 5

是的,只需传递NULL到第一个参数即可。

的联机帮助页realloc(3)说...

realloc()函数将ptr指向的内存块的大小更改为size字节。从区域开始到新旧尺寸的最小值的范围内,内容将保持不变。如果新的大小大于旧的大小,则添加的内存将不会被初始化。如果 ptr 为 NULL,则对于所有 size 值,调用相当于 malloc(size);如果 size 等于 0,并且 ptr 不为 NULL,则调用相当于 free(ptr)。除非 ptr 为 NULL,否则它必须是由之前对 malloc()、calloc() 或 realloc() 的调用返回的。如果指向的区域被移动,则完成 free(ptr)。