免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4586 | 回复: 14
打印 上一主题 下一主题

求高手,關於malloc(0); [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-14 00:17 |只看该作者 |倒序浏览
見如下代碼:
  1. char *ptr;  
  2. if ((ptr = (char *)malloc(0)) ==  NULL)  
  3. else  
  4.         puts("Got a null pointer");  
  5. puts("Got a valid pointer");  
复制代码


為什麼結果是:Got a valid pointe

我個人的理解是:給ptr指向了一個非NULL的有效地址,盡管這個地址大小僅為0,而NULL是一個為0x00000000的起始址,代表一個無效地址。

不知道正確與否,期待高手解答!

评分

参与人数 1可用积分 +1 收起 理由
shang2010 + 1 原创内容

查看全部评分

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
2 [报告]
发表于 2010-12-14 00:24 |只看该作者
实现有关

即使是malloc(0),在某个实现中可能也分配了16个字节的大小

论坛徽章:
0
3 [报告]
发表于 2010-12-14 00:31 |只看该作者
回复 2# chenzhanyiczy


    因為裏面是有地址對比,其實malloc(0)的地址是一個有效地址,而NULL是一個非法地址。是吧?可以這樣來理解嘛,

而至於malloc(0)是否分配有效的大小的地址,其實並不重要吧?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2010-12-14 08:46 |只看该作者
Linux man:

If the size of the space  requested  is  0,  the behavior is implementation-defined: the value returned shall be either a null pointer or a unique pointer.

MSDN:
If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item.

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
5 [报告]
发表于 2010-12-14 08:52 |只看该作者
Linux man:

If the size of the space  requested  is  0,  the behavior is implementation-defined:  ...
hellioncu 发表于 2010-12-14 08:46



    总是这么的专业。linux中有2种情况,windows中就返回null

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
6 [报告]
发表于 2010-12-14 09:00 |只看该作者
总是这么的专业。linux中有2种情况,windows中就返回null
rubylc_unix 发表于 2010-12-14 08:52



AIX:

If the size requested is 0, malloc returns NULL in normal circumstances. However, if the program was compiled with the
       defined _LINUX_SOURCE_COMPAT macro, malloc returns a valid pointer to a space of size 0.

HPUX:
The only external difference between the old malloc(3X) allocator and
      the malloc(3C) allocator is that the old allocator would return a NULL
      pointer for a request of zero bytes.  The malloc(3C) allocator returns
      a valid memory address.  This is not a concern for most applications.

看了之后更纠结了{:3_189:}
尽量不要malloc 0字节为好

论坛徽章:
0
7 [报告]
发表于 2010-12-14 09:10 |只看该作者
vc中试了下,返回的不是null。。。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2010-12-14 09:14 |只看该作者
回复 6# hellioncu


    是阿,估计也没有什么好处吧

论坛徽章:
0
9 [报告]
发表于 2010-12-14 10:44 |只看该作者
标准中没有规定的 就没必要去计较了

论坛徽章:
0
10 [报告]
发表于 2010-12-14 12:52 |只看该作者
4楼v5
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP