在realloc()之前需要malloc()吗?

问题描述:

因为我读了realloc将作为malloc如果指向的大小为0,我没有malloc()使用它,只要指针是静态的,全局的,或者自动显式设置为NULL。在realloc()之前需要malloc()吗?

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

Open Groups' specifications

如果ptr为空指针,realloc()的 应当相当于malloc()函数用于 指定的大小。

若ptr不匹配,如果空间 先前已经由 呼叫释放释放()的指针 ,由calloc早期()返回, 的malloc(),或realloc()或或realloc() 行为未定义。

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

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

但是,使用malloc代替realloc的特殊语义通常会更清楚。这不是什么有效的问题,但不会让阅读代码的人感到困惑。

(编辑:realloc演技去除提到作为free,因为它不是标准C.见注释)。

+3

要知道,对于大小为0的realloc C99标准从POSIX标准略有不同。 C99标准说明了这一点:*如果请求的空间大小为零,则行为是实现定义的:返回空指针或行为就好像大小非零值*。 – JeremyP 2010-12-16 09:57:10

+0

所以当p不是NULL时,可以做“p = malloc(n)”,后跟“realloc(p,0)”吗?我真的不会这样做!对不起,关于格式 – dubnde 2010-12-16 10:37:45

+0

杰里米,是不是涉及'请求'的大小?这与重新分配前一个指针有什么关系? – 2010-12-16 10:52:53