关于 malloc(0)的返回值是不是NULL的问题

问题:

int *ptr;

if(((char *)malloc(0))==NULL)
{
    printf("got a null val");
}
else
{
    printf("got a real val");
}

问:会输出打印什么信息?

 

输出会是:got a real val

原因分析:

在使用malloc(SIZE)的时候,实际使用的内存量是大于SIZE的。有人也许会问为什么?

我们看一个完整的:

首先 ptr=(char*)(malloc(SIZE))

 

最后需要 free(ptr)。那么我想说的是:为什么在free的时候只要传入ptr 系统就知道你要释放多少内存?它只是知道了开始释放内存的开始地址,为什么他会释放SIZE个字节的大小?

原因是在malloc(SIZE)的时候,其实申请的内存大小是SIZE+内存信息描述;

这个内存信息描述是占空间的。(它需要知道你申请了多少个字节的空间)。所以在你free的时候只要告诉它开始地址就行了,它会知道需要释放多少空间的,其原因就在信息描述。

所以malloc(0),其实占用了内存空间的   它返回不是NULL;所以在这里他的输出是:got a real val

转载于:https://my.oschina.net/905377346/blog/760885

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值