malloc(0)

sms88 2008-06-06 10:47:32

char *pChar =NULL;
pChar= (char*)malloc(0);
if (pChar != NULL )
cout<<"pChar != NULL\n" ;

这啥回事?
...全文
391 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_flying 2009-04-02
  • 打赏
  • 举报
回复
赞成楼上的!
cp4wanger 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fetag 的回复:]
要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

解...
[/Quote]
malloc分配中,控制size大小的经常会是变量,变量就有是零的可能,了解malloc(0)的返回情况自然关系到代码的书写.
C的陷阱很多,追求技术细节不等于钻牛角尖,自以为聪明到可能终有一天身受其害.
Crob 2008-06-09
  • 打赏
  • 举报
回复
Scott的Effective C++一书中所说,operator new操作符对付new[0]的解决方法是,将0字节需求视为1个字节。所所以或许malloc(0)也会视为1个字节需求。
visame 2008-06-07
  • 打赏
  • 举报
回复

来自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
lala9517 2008-06-07
  • 打赏
  • 举报
回复
确实,这就属于牛角尖。。。
不仅让人头疼,还没用#_#!
andy_cai 2008-06-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fetag 的回复:]
要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

解...
[/Quote]
看得出来,过儿是实用主义者,我支持
jeff_nie 2008-06-07
  • 打赏
  • 举报
回复
不懂.
独孤过儿 2008-06-07
  • 打赏
  • 举报
回复
要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

解...
yshuise 2008-06-07
  • 打赏
  • 举报
回复
像这种写法就有病。
bitxinhai 2008-06-07
  • 打赏
  • 举报
回复
malloc(0)应该能返回一个合法的指针,
但平时最好不要这样去写
fibbery 2008-06-07
  • 打赏
  • 举报
回复
应该加上限制,对于分配0字节的内存是在没有意义,如果size为零程序可以直接返回。

但是,对于技术上来说,我赞成1楼的说法,既然这是一个编译器相关的问题,那么不引起移植性问题,还是要做限制。
我在VC、Ubuntu的gcc中测试过了,都不为NULL。
sms88 2008-06-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fetag 的回复:]
要是实在没事做,出去跑跑步,或者给民工小学义务讲讲课都好啊,为什么要自己给自己挖坑,然后往进跳呢?不理

解...
[/Quote]

那个iSize 其实是由其它代码赋值过来的,只是经常被赋值为0,我只是担心这样用malloc会不会引起程序异常
sms88 2008-06-06
  • 打赏
  • 举报
回复
有一次我跟踪到一段类似这样的程序,调用好几次没出现异常,可最后还是在strstr函数内把程序给挂了

//...
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:") ;
驴被脑袋踢了 2008-06-06
  • 打赏
  • 举报
回复
沙发,等待高手
飞哥 2008-06-06
  • 打赏
  • 举报
回复
按道理应该返回NULL
iu_81 2008-06-06
  • 打赏
  • 举报
回复
指针在
但是没有空间
K行天下 2008-06-06
  • 打赏
  • 举报
回复
malloc(0)
ANSI/ISO 标准声称它可能返回任意一种; 其行为由实现定义;
有时候是指向长度为0空间的指针,有时候是空指针,是编译器而定。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧