首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • malloc(0) [已结贴,结贴人:sms88]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sms88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-06-06 22:47:32 楼主
    C/C++ code
    char *pChar =NULL; pChar= (char*)malloc(0); if (pChar != NULL ) cout<<"pChar != NULL\n" ;

    这啥回事?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • k2eats
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-06 22:51:161楼 得分:2
    malloc(0)
    ANSI/ISO 标准声称它可能返回任意一种; 其行为由实现定义;
    有时候是指向长度为0空间的指针,有时候是空指针,是编译器而定。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • iu_81
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-06 22:52:372楼 得分:2
    指针在
    但是没有空间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wanfustudio
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      2

    发表于:2008-06-06 22:52:583楼 得分:2
    按道理应该返回NULL
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • vicozo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-06 22:55:464楼 得分:1
    沙发,等待高手
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sms88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-06 22:57:165楼 得分:0
    有一次我跟踪到一段类似这样的程序,调用好几次没出现异常,可最后还是在strstr函数内把程序给挂了
    C/C++ code
    //... int iSize = 0 ; //... char *pChar =NULL; pChar= (char*)malloc(iSize ); if (pChar != NULL ) cout<<"pChar != NULL\n" ; memset(pchar , 0 , iSize ) ; char *pPos = strstr(pchar , "size:") ;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yshuise
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 08:56:106楼 得分:1
    像这种写法就有病。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fetag
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 09:09:017楼 得分:2
    要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

    解...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jeff_nie
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 10:31:208楼 得分:1
    不懂.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • andy_cai
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 11:05:409楼 得分:2
    引用 7 楼 fetag 的回复:
    要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

    解...

    看得出来,过儿是实用主义者,我支持
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lala9517
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 11:24:2410楼 得分:2
    确实,这就属于牛角尖。。。
    不仅让人头疼,还没用#_#!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • visame
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 12:45:1411楼 得分:0
    C/C++ code
    来自C99的最权威的解释: If the size of the space requested is zero, the behavior is implementationdefined: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object. 所以最后答案是: implementationdefined
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sms88
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 18:22:5512楼 得分:0
    引用 7 楼 fetag 的回复:
    要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

    解...


    那个iSize 其实是由其它代码赋值过来的,只是经常被赋值为0,我只是担心这样用malloc会不会引起程序异常
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fibbery
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 18:43:3813楼 得分:2
    应该加上限制,对于分配0字节的内存是在没有意义,如果size为零程序可以直接返回。

    但是,对于技术上来说,我赞成1楼的说法,既然这是一个编译器相关的问题,那么不引起移植性问题,还是要做限制。
    我在VC、Ubuntu的gcc中测试过了,都不为NULL。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bitxinhai
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-07 19:04:1714楼 得分:1
    malloc(0)应该能返回一个合法的指针,
    但平时最好不要这样去写
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Crob
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-06-09 14:33:4815楼 得分:2
    Scott的Effective C++一书中所说,operator new操作符对付new[0]的解决方法是,将0字节需求视为1个字节。所所以或许malloc(0)也会视为1个字节需求。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cp4wanger
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-07-01 19:13:1116楼 得分:0
    引用 7 楼 fetag 的回复:
    要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

    解...

    malloc分配中,控制size大小的经常会是变量,变量就有是零的可能,了解malloc(0)的返回情况自然关系到代码的书写.
    C的陷阱很多,追求技术细节不等于钻牛角尖,自以为聪明到可能终有一天身受其害.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved