HW面试改错题

higoalhwl 2008-07-31 10:30:45
eventType *CreateEvent(int groupId,int eventId,int length)
{
eventType *event;

event = (eventType*)malloc(sizeof(eventType));

if(event==NULL)
{
return NULL;
}
memset(event,0,sizeof(eventType));
event->groupId=groupId;
event->eventId=eventId;
event->length=length;

if(0!=length)
{
event->data=(unsigned char*)malloc(length);
if(NULL==event->data)
{
return NULL;
}
}

return event;
}

错在哪里啊?
...全文
595 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
zming 2008-08-01
  • 打赏
  • 举报
回复
36楼的,

if(event==NULL) 也应该写为
if ( NULL == event )

这样做的目的是为了防止少写一个 “=”

如果写成: if ( NULL = event ) 与 if ( 0 = length ), 编译时将立即报出语法错。

如果写成: if ( event = NULL ) 和 if ( length = 0 ) , 您就郁闷地慢慢去排错吧。
ack2me 2008-08-01
  • 打赏
  • 举报
回复
华为好进个毛啊!·#?
飞哥 2008-08-01
  • 打赏
  • 举报
回复

eventType *CreateEvent(int groupId,int eventId,int length)
{
eventType *event= (eventType*)malloc(sizeof(eventType));

if(NULL == event)
{
return NULL;
}
memset(event,0x0,sizeof(eventType));
event->groupId=groupId;
event->eventId=eventId;
event->length=length;

if(0!=length)
{
event->data=(unsigned char*)malloc(length * sizoef(unsigned char));
if(NULL==event->data)
{
free(event);
event = NULL;
return NULL;
}
}

return event;
}
chenzhiyubuaa 2008-08-01
  • 打赏
  • 举报
回复
说个和主题不相关的
if(event==NULL)
if(0!=length)
===================
这两个if的判断看起来就不爽
bleach210 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 lcgenius 的回复:]
学习了
[/Quote]
sc_valentine21 2008-08-01
  • 打赏
  • 举报
回复
考的就是细心,缜密
junsky2006 2008-08-01
  • 打赏
  • 举报
回复
呵呵,就是内存泄漏,如果第一个没有释放的话!
csuhawk 2008-08-01
  • 打赏
  • 举报
回复
俺也看出来了
lims_xlh 2008-08-01
  • 打赏
  • 举报
回复
mark
hans511002 2008-08-01
  • 打赏
  • 举报
回复
length 如果小于0会怎样?
blh 2008-08-01
  • 打赏
  • 举报
回复
又见内存泄漏问题,HW也不出点新鲜点的

eventType *CreateEvent(int groupId,int eventId,int length)
{
eventType *event;

event = (eventType*)malloc(sizeof(eventType));

if(event==NULL)
{
return NULL;
}
memset(event,0,sizeof(eventType));
event->groupId=groupId;
event->eventId=eventId;
event->length=length;

if(0!=length)
{
event->data=(unsigned char*)malloc(length);
if(NULL==event->data)
{
free(event);
return NULL;
}
}

return event;
}
issachen 2008-08-01
  • 打赏
  • 举报
回复
swallowma的观察力真好,佩服ING
tangyulong1214 2008-08-01
  • 打赏
  • 举报
回复
eventType *CreateEvent(int groupId,int eventId,int length)
{
eventType *event ;

event = (eventType*)malloc(sizeof(eventType));

if(event==NULL)
{
return NULL;
}
memset((void *)event,0,sizeof(eventType));
event->groupId=groupId;
event->eventId=eventId;
event->length=length;

if(0!=length)
{
event->data=(unsigned char*)malloc(length);
if(NULL==event->data)
{
free(event);
return NULL;
}
}

return event;
}
hahhh 2008-08-01
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 swallowma 的回复:]
请注意此处也有隐患
if(0!=length)
{
event->data=(unsigned char*)malloc(length);

length 为Int型所以可能为负数,而malloc需要的参数是size_t也就是unsigned int,那么当length为负数时malloc将试图去申请一块非常大的内存,这样轻则分配失败,多次调用的话会大量占用系统内存资源。
[/Quote]
是啊,swallowma看得真仔细,这也是个不能忽视的细节。
guzhilei1986 2008-07-31
  • 打赏
  • 举报
回复
哦哦,哈哈,自己看了半天也没有觉得有什么问题,看了大家的讨论才知道,关于内存的声明和释放真是一个意识,有经验的人才能像条件饭反射一样一眼就可以看出来。
我要多多学习哦。
lunarfan 2008-07-31
  • 打赏
  • 举报
回复
mark
udb2008 2008-07-31
  • 打赏
  • 举报
回复
too easy.......
realdragon2 2008-07-31
  • 打赏
  • 举报
回复
mark~
moonwrong 2008-07-31
  • 打赏
  • 举报
回复
而且名气也不小,经常有新闻。
e_sharp 2008-07-31
  • 打赏
  • 举报
回复
event->data=(unsigned char*)malloc(length);
if(NULL==event->data)
{
return NULL;
}


--------------------------

这个地方如果malloc(length)内存分配失败的话,
event = (eventType*)malloc(sizeof(eventType))分配的内存没有释放。
加载更多回复(19)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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