关于strlen误用的一点记录
2013-07-18 01:53
357 查看
今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后。但是朋友的问题比较诡异,类型正确,也没有进行erase操作,那么剩下唯一的可能性就是vector在某个地方被破坏了。下断点调试了一下,发现了一处调用memset的操作,是将一个字符数组类型的成员变量ServerName清零(和出问题的vector成员变量属于同一个类)。仔细一看,memset的length参数传的是strlen(ServerName),这就有一个问题,因为strlen的工作机制是统计遇到第一个\0结束符位置的字符数,而ServerName是个512字节的静态数组,初始化时会随机填充垃圾数据,那么遇到\0的时候很可能已经越界,因为类成员变量的内存地址是连续存放的,那么就会破坏数组后面变量。至此,问题得解,谨以此记录以备忘。
相关文章推荐
- 关于IOS Autolayout 的一点小记录
- 记录一点关于CMAKE的交叉编译
- 关于strlen函数的一点新发现
- 关于ArraryList排序的一点记录
- 关于在Eclipse中使用正则表达式替换的一点记录(使用正则表达式的分组)
- 关于ArrayList和Iterator的一点误用的理解
- 关于db2的一点记录
- 关于strlen的一点思考
- 关于Android seekTo的一点记录
- 记录一点关于list每次以指定的间距分割的代码,仅做一个记录
- 关于微课开发的一点新的记录
- 关于Android使用git版本管理工具的一点记录
- 【NetApp】关于Snapmirror强制停止的一点记录
- 记录关于交叉编译器的一点知识
- 关于OJ上STL库使用的一点经验记录
- 关于最近布线的一点记录
- 关于页面编码问题的一点记录
- 日常记录——关于数组下标计算的一点心得
- 关于阿里巴巴duboo分布式服务框架的一点记录。