32

由于我已经阅读 realloc 将在指向的大小为 0 时充当 malloc,因此我在没有 malloc() 的情况下使用它,前提是指针是静态的、全局的,或者如果是自动的,则显式设置为 NULL。

但是,我注意到很多程序员尝试设置它或将其设置为 malloc(1)。需要吗?

4

2 回答 2

33

来自Open Groups 的规范

如果 ptr 是空指针,realloc() 应等效于指定大小的 malloc()。

如果 ptr 与 calloc()、malloc() 或 realloc() 先前返回的指针不匹配,或者如果空间先前已通过调用 free() 或 realloc() 释放,则行为未定义。

于 2010-12-16T09:43:45.247 回答
13

malloc不是必需的,您只能使用realloc

malloc(n)相当于realloc(NULL, n)

malloc然而,使用它来代替特殊语义通常更清晰realloc。这不是什么工作的问题,而是不要让阅读代码的人感到困惑。

(编辑:删除提及realloc作为free,因为它不是标准的 C。见评论。)

于 2010-12-16T09:44:55.697 回答