ptr = (char *)malloc(0)

char  *ptr;
if ((ptr = (char *)malloc(0)) == NULL)  
   
  puts( "Got   a   null   pointer "); 
else 
  puts( "Got   a   valid   pointer "); 

上面程序在VC6.0下输出结果是:Got a valid  pointer
 
请问指针为NULL时指向哪里,分配的空间为0时又指向哪里?

当使用malloc后,只有在没有足够内存的情况下会返回NULL,或是出现异常报告。
 


malloc(0),系统就已经帮你准备好了堆中的使用起始地址(不会为NULL)。但是你不能对该地址进行写操作(不是不允许),如果写了话,当调用free(ptr)就会产生异常报告(地址受损)。


例如:int pp=(strlen(ptr=(char*)malloc(0))) ,int pp=(sizeof(ptr=(char*)malloc(0)))都会输出Got  a  null  pointer。

注意:
(1)NULL一般预定义为(void *)0,指向0地址。
(2)malloc是在程序堆栈上分配空间,不会是0地址 。
(3)malloc(0)是指分配内存大小为零 ,NULL是不指向任何实体,malloc(0)也是一种存在不是NULL。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏波.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值