malloc函数详解

来源:互联网 发布:php网站开发实例教程 编辑:程序博客网 时间:2024/06/06 12:37

在逛知乎过程中,偶然发现一个问题: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

原创粉丝点击