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类,当然最好不要初始化模板类,拥有虚函数表的类等等

原文地址:https://www.cnblogs.com/workharder/p/13544802.html