关于strlen误用的一点记录
2024-08-25 05:49:21
今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后。但是朋友的问题比较诡异,类型正确,也没有进行erase操作,那么剩下唯一的可能性就是vector在某个地方被破坏了。下断点调试了一下,发现了一处调用memset的操作,是将一个字符数组类型的成员变量ServerName清零(和出问题的vector成员变量属于同一个类)。仔细一看,memset的length参数传的是strlen(ServerName),这就有一个问题,因为strlen的工作机制是统计遇到第一个\0结束符位置的字符数,而ServerName是个512字节的静态数组,初始化时会随机填充垃圾数据,那么遇到\0的时候很可能已经越界,因为类成员变量的内存地址是连续存放的,那么就会破坏数组后面变量。至此,问题得解,谨以此记录以备忘。
最新文章
- Protocol Buffers(Protobuf) 官方文档--Protobuf语言指南
- Oracle表与索引的分析及索引重建
- [转帖]MATLAB曲线绘制及颜色类型
- [置顶] 【C/C++学习】之十三、虚函数剖析
- linux中ctrl+z、ctrl+d和ctrl+c的区别
- Android中吐司当前电池电量
- Gnu Linux--Ubuntu系统清理项整理
- 一种利用异常机制基于MVC过滤器的防止重复提交的机制分享
- cpu-z如何查看电脑配置数据方法介绍
- ORACLE 查询某表中的某个字段的类型,是否为空,是否有默认值等
- 安装maven,并配置eclipse
- 开发中常用的es6知识
- iproute2学习笔记
- python3爬虫抓取智联招聘职位信息代码
- Django中间件的使用
- [hgoi#2019/3/21]NOIP&;NOI赛后总结
- 20155222卢梓杰 实验五 MSF基础应用
- 解决EditPlus在设置了UTF-8之后,编写的HTML页面仍出现汉字乱码问题
- thinkphp5的Redis缓存配置
- [mobile]移动端页面没有重新请求时,刷新页面代码