- 論壇徽章:
- 5
|
問題背景:在棧上創(chuàng)建了一個(gè)TiXmlDocument對(duì)象,運(yùn)行了報(bào)錯(cuò): *** glibc detected *** ./exe_name: free(): invalid pointer: 0x00000000006ab128 ***
但是將在棧上創(chuàng)建對(duì)象改為在堆上創(chuàng)建,用完后delete就沒有這個(gè)問題。
或者將這個(gè)對(duì)象聲明為static(程序執(zhí)行過程中不執(zhí)行析構(gòu)),也是沒有這個(gè)問題
我是將TiXmlDocument封裝在一個(gè)類中,相關(guān)偽代碼如下:
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();
}
報(bào)錯(cuò)時(shí)堆棧信息如下:- Program terminated with signal 6, Aborted.
- #0 0x0000003ce4a30265 in raise () from /lib64/libc.so.6
- (gdb) bt
- #0 0x0000003ce4a30265 in raise () from /lib64/libc.so.6
- #1 0x0000003ce4a31d10 in abort () from /lib64/libc.so.6
- #2 0x0000003ce4a6a9bb in __libc_message () from /lib64/libc.so.6
- #3 0x0000003ce4a7247f in _int_free () from /lib64/libc.so.6
- #4 0x0000003ce4a728db in free () from /lib64/libc.so.6
- #5 0x00002b434875dc43 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
- #6 std::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
- #7 0x000000000040c7e4 in TiXmlDocument::~TiXmlDocument (this=0x7fff1c90b248, __in_chrg=<value optimized out>) at ../../xml/include/tinyxml.h:1409
- #8 0x000000000040b370 in Config::~Config (this=0x7fff1c90b200, __in_chrg=<value optimized out>) at config.cc:10
- #9 0x0000000000406c97 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
復(fù)制代碼 求指教,多謝 |
|