关于strlen误用的一点记录

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

相关文章
相关标签/搜索