malloc(0) & free(NULL)

man malloc / man free

The  malloc()  function  allocates size bytes and returns a pointer to the allocated memory.  The memory is not initialized.  If size is 0, then malloc() returns either NULL, or a unique pointer value that can later be successfully  passed to free().

The  free()  function frees the memory space pointed to by ptr, which must have been returned by a previous call to malloc(), calloc(), or realloc().  Otherwise, or if free(ptr) has already been called before,  undefined  behavior  occurs. If ptr is NULL, no operation is performed.

不太确定malloc(0)的使用场景,尤其是返回值是implementation defined。blog 里有标准的条款,也有glibc的实现和测试代码,不错!

free(NULL),记得之前都是会crash的…,man page说是safe的,好吧……不过对于同一段内存free的时候还是要注意,例如下面的代码

char *p = malloc(10);

free(p);
p = NULL; //需要设置为NULL,这样以后同一段内存就不会被重复free了

free(p); // do nothing since p is NULL now.
发布了34 篇原创文章 · 获赞 0 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hfyinsdu/article/details/105161484