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.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值