在使用stl的string的过程中,遇到了一个会引起core的问题,具体的问题代码如下:
#include#include /** * 该程序是为测试stl的string在某种情况下,发生了core * 当构造函数的写法为写法一的情况,程序发生了core * 测试环境为 * Linux mengpl-virtual-machine 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux * 编译器为 * g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 * core信息如下: * (gdb) where #0 0x00007ffff7b78bca in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #1 0x00007ffff7b79ff6 in std::string::assign(std::string const&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6 #2 0x0000000000400ca9 in StringTest::set_phone (this=0x7fffffffdb60, strPhone=...) at stlstringtest.cpp:26 #3 0x0000000000400b3e in main (argc=1, argv=0x7fffffffdc78) at stlstringtest.cpp:38 * 当修改为写法二的情况时,未发生core */class StringTest{public: // 写法一 StringTest() { memset(this, 0, sizeof(*this)); } // // 写法二 // StringTest():iSize(0),phone("") // { // } inline int get_size() const { return m_iSize; } inline std::string get_phone() const { return m_strPhone; } inline void set_size(const int & iSize) { m_iSize = iSize; } inline void set_phone(const std::string & strPhone) { m_strPhone = strPhone; }private: int m_iSize; std::string m_strPhone;};int main(int argc,char * argv[]){ StringTest sTest; sTest.set_size(1); sTest.set_phone(""); std::cout << sTest.get_size() << std::endl; }
core信息已经写在了代码中,分析是因为memset函数,对类占用内存进行了分配,而stl中string本身也有一套内存分配的机制,二者产生了冲突,所以产生了core。具体问题,待日后研究源码分析,先记下这个问题。引以为戒,不在使用这样的写法。