Chinaunix首页 | 论坛 | 博客
  • 博客访问: 285074
  • 博文数量: 86
  • 博客积分: 694
  • 博客等级: 上士
  • 技术积分: 833
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-31 16:40
文章分类

全部博文(86)

文章存档

2012年(75)

2011年(6)

2010年(5)

分类:

2012-04-22 17:07:50

原文地址:16道嵌入式C语言面试题(经典) 作者:

原文已删除
阅读(2047) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

android_bsp2012-05-09 21:49:15

gdmmx: malloc(0)的问题引起我兴趣了,不惜挖坟。
这个问题我第一感是取决于编译器实现,出题者只说了会返回有效地址却没说编译器这么实现的意义,留给大家思考。去查了.....
这位兄弟看得出来是认真的钻研了,我都没深入的了解,不过话说回来,想这些面试题纯粹是为了满足面试官的自尊心,好比像 a +++ b这种代码傻瓜也不会这样写,但是面试的时候就拿出来考。

gdmmx2012-05-09 17:08:18

malloc(0)的问题引起我兴趣了,不惜挖坟。
这个问题我第一感是取决于编译器实现,出题者只说了会返回有效地址却没说编译器这么实现的意义,留给大家思考。去查了一下C99,出题者的答案说绝对了,C99专门写明,当malloc(0)时,其行为由实现者(编译器)决定。

对于返回有效地址的好处,我想来想去还是没想出有啥好处,相反,倒是想到了坏处。
返回有效地址后,后续程序代码一旦试图读写该分配的空间时将出现两种情况:
1. 非法访问内存Crash(C库并没分配真实空间)
2. 读写成功(C库为0长度分配某一size的空间)
对于前者实现,让程序在read/write时发生Crash不如干脆让程序Crash在malloc(0)时。这个Crash的root cause是0长度,Crash在read/write处延迟了bug的暴露,不是出错第一现场,debug者追踪root cause时容易找错方向(第一感会去找src的地址有效性和数据有效性以及是否数据超长,而不是先去查dest)。而Crash在m