malloc函数详解

在逛知乎过程中,偶然发现一个问题:malloc(0)从堆空间申请0个字节,咋办?是报错,还是返回正确地址?申请的空间又有和意义?内存碎片又是什么?带着这一系列问题,我到网上找到了一篇不错的博客,对其解释比较恰当。不过首先列出我自己实测的代码情况:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	char *p = (char *)malloc(0);
	printf("p = %p\n",p);
	printf("sizeof(p) = %d\n",sizeof(p));
	printf("sizeof(*p) = %d\n",sizeof(*p));
	return 0;
}
此程序运行结果:

p = 0x16a0010

sizeof(p) = 8

sizeof(*p) = 1

解释一下,第一行说明malloc(0)成功了,并且返回了一个堆地址,只是由于我们申请的是0个字节,所以这个空间无法使用,第二行说明指针p占8个字节(对于64bit系统而言),第三个表示指针所指向的类型所占字节大小,这里是char型,所以为1,如果是int,则为4。

malloc函数,详见:http://www.cnblogs.com/Commence/p/5785912.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值