2007/01/29

super bug

这个超级Bug的起因很不容易发现。

如果在使用MemMove的时候,算错了大小,导致写入越界,在使用MemPtrFree释放内存的时候会遇到错误。

实例:写入的时候错误格式是:
MemMove(dst, src, sizeof(TSeqAddr) * m_num - position);

这里的m_num - position忘记使用括号了。结果是第三个参数越界;然后在使用MemPtrFree释放dst的内存时,会遇到错误。这个错误在模拟器上不会报,在实机上立刻重启,无任何错误信息,#*377的结果是Fatal Exception。找到这个Bug花了我整整5个小时的时间。吐血ing....

外一则:
赋值的对象需要重载"=",尤其在使用集合类的时候,否则死得很难看。

No comments: