zoukankan      html  css  js  c++  java
  • 关于strlen误用的一点记录

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

  • 相关阅读:
    将博客搬至CSDN
    NOIP2018酱油记
    CF 1039D You Are Given a Tree && CF1059E Split the Tree 的贪心解法
    最大异或子序列问题
    UVa 10615
    UVa 1057
    用树状数组代替平衡树
    [CTSC2008]图腾totem
    POI2008 题解
    简便思路的题目别人的做法
  • 原文地址:https://www.cnblogs.com/eros/p/3197169.html
Copyright © 2011-2022 走看看