全部博文(86)
分类:
2012-04-22 17:07:50
android_bsp2012-05-09 21:49:15
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