关于strlen误用的一点记录

        今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后。但是朋友的问题比较诡异,类型正确,也没有进行erase操作,那么剩下唯一的可能性就是vector在某个地方被破坏了。下断点调试了一下,发现了一处调用memset的操作,是将一个字符数组类型的成员变量ServerName清零(和出问题的vector成员变量属于同一个类)。仔细一看,memset的length参数传的是strlen(ServerName),这就有一个问题,因为strlen的工作机制是统计遇到第一个\0结束符位置的字符数,而ServerName是个512字节的静态数组,初始化时会随机填充垃圾数据,那么遇到\0的时候很可能已经越界,因为类成员变量的内存地址是连续存放的,那么就会破坏数组后面变量。至此,问题得解,谨以此记录以备忘。

posted @ 2013-07-18 01:53  林公子  阅读(353)  评论(0编辑  收藏  举报