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.