zoukankan      html  css  js  c++  java
  • memset初始化字符串string崩溃原因分析:

    环境:linux(win7下vs不会出现崩溃)

    我喜欢先说结果,运行崩溃在    C1.m_Content = "aaaa":

    struct ChatMsg
    {
            int                                     m_nTargetGuid;
            std::string                             m_Content;
            ChatMsg()
            {
                    memset(this, 0, sizeof(*this));
            }
    };
    int main()
    {
            ChatMsg C1;
            C1.m_Content = "aaaa";
            return 0;
    }

    原因分析:

    首先需要了解String类内部构造,内部也是很复杂,有很多指针,当memset时都为0了,破坏了内部结构,使得内部指针都为0,调用赋值构造函数时会出啥乱子就不清楚了

    具体想了解内部结构的参考帖子:https://www.cnblogs.com/findumars/p/5006181.html

    总结:

    memset不可初始化string类,当然最好不要初始化模板类,拥有虚函数表的类等等

  • 相关阅读:
    文件操作
    数据补充
    小数据池
    列表
    基础知识1
    我的Python之旅开始
    正则
    模块
    迭代器与生成器
    文件操作
  • 原文地址:https://www.cnblogs.com/workharder/p/13544802.html
Copyright © 2011-2022 走看看