kaede_1 发表于 2016-05-25 17:42

TiXmlDocument 栈上对象析构问题

问题背景:在栈上创建了一个TiXmlDocument对象,运行了报错: *** glibc detected *** ./exe_name: free(): invalid pointer: 0x00000000006ab128 ***
            但是将在栈上创建对象改为在堆上创建,用完后delete就没有这个问题。
            或者将这个对象声明为static(程序执行过程中不执行析构),也是没有这个问题

我是将TiXmlDocument封装在一个类中,相关伪代码如下:
class A
{
private:
    //TiXmlDocument *m_doc;
    TiXmlDocument m_doc;
}

A::func()
{
    //m_doc = new TiXmlDocument ();
    //m_doc->LoadFile(strConfigFile);
    m_doc.LoadFile(strConfigFile);
    //...get some date
}
init()
{
    A a;
    a.func();
}
main()
{
    init();
}

报错时堆栈信息如下:Program terminated with signal 6, Aborted.
#00x0000003ce4a30265 in raise () from /lib64/libc.so.6
(gdb) bt
#00x0000003ce4a30265 in raise () from /lib64/libc.so.6
#10x0000003ce4a31d10 in abort () from /lib64/libc.so.6
#20x0000003ce4a6a9bb in __libc_message () from /lib64/libc.so.6
#30x0000003ce4a7247f in _int_free () from /lib64/libc.so.6
#40x0000003ce4a728db in free () from /lib64/libc.so.6
#50x00002b434875dc43 in _M_dispose (this=<value optimized out>, __in_chrg=<value optimized out>)
    at /opt/gccsrc/gcc-4.6.3/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:235
#6std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string (this=<value optimized out>, __in_chrg=<value optimized out>)
    at /opt/gccsrc/gcc-4.6.3/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h:534
#70x000000000040c7e4 in TiXmlDocument::~TiXmlDocument (this=0x7fff1c90b248, __in_chrg=<value optimized out>) at ../../xml/include/tinyxml.h:1409
#80x000000000040b370 in Config::~Config (this=0x7fff1c90b200, __in_chrg=<value optimized out>) at config.cc:10
#90x0000000000406c97 in InitFromConfig (workpath=0x7fff1c90bb8d "/opt//src/../data") at main.cc:138
#10 0x0000000000406d04 in Init (argc=4, argv=0x7fff1c90b4f8) at main.cc:153
#11 0x0000000000406ee3 in main (argc=4, argv=0x7fff1c90b4f8) at main.cc:72求指教,多谢

drangon 发表于 2016-05-25 22:52

珍惜生命,远离TinyXML,还是换用pugixml吧,

kaede_1 发表于 2016-05-26 09:58

回复 2# drangon


    .。。。。

rainsloo 发表于 2016-05-28 22:56

TINYXML 析构是这样的

m_doc.clear()//在对象析构之前一定要调用这个.
页: [1]
查看完整版本: TiXmlDocument 栈上对象析构问题