文件名称:包含string对象的结构与memset初始化操作
文件大小:537KB
文件格式:DOCX
更新时间:2021-12-13 12:01:43
C++ memset 内存泄漏
memset初始化std::string对象时,按字节顺序将std::string对象所在空间清零,破坏了std::string对象的成员结构,使Myroxy指针资源变为野指针,操作其迭代器会出现不可预知的异常,在存储字符串时可能分配了不必要的内存空间,并且还导致这些内存不能被释放。 回到memset函数,它设计的初衷是对结构资源连续的空间进行赋值操作,而对于较为复杂和抽象的类型,包括我们自定义的各种业务类型,这些类型中可能存在多层继承关系,那么这些结构资源中就隐藏着虚函数表、虚指针,对于多层聚合、组合的类型也会存在自定义类型的指针对象,这些资源都可能不是连续的空间去存储,如果使用memset去初始化这类资源,自然是违背了memset设计初衷,导致程序出现不可预知的异常。 除了memset函数外,在使用memcpy、_memccpy、memove这些函数操作上述的资源时,也需要注意类似的异常发生。