1
我檢查時很卡與此惱人的段錯誤,如果一個指針是0。這是有問題的代碼:斷言(指針)提高分段違例
bool egammaMVACalib::checkTree()
{
// Not a TChain
cout << "a" << endl;
assert(m_tree); // crash on line 751 (this one)
cout << "B" << endl;
m_tree
是類型的egammaMVACalib
數據成員TTree*
所以我真的不明白爲什麼assert(m_tree)
可以引發分割違規。這與堆棧輸出跟蹤
a
19:07:25 30574 Wrk-0.9 | *** Break ***: segmentation violation
===========================================================
There was a crash.
This is the entire stack trace of all threads:
===========================================================
#0 0x000000361869a4d5 in waitpid() from /lib64/libc.so.6
#1 0x000000361863c481 in do_system() from /lib64/libc.so.6
#2 0x00002ac5099cb322 in TUnixSystem::StackTrace()()
from /usr/local/proof/root/lib/libCore.so
#3 0x00002ac5099c7fea in TUnixSystem::DispatchSignals(ESignals)()
from /usr/local/proof/root/lib/libCore.so
#4 <signal handler called>
#5 egammaMVACalib::checkTree (this=0x0) at ../Root/egammaMVACalib.cxx:751
#6 0x00002ac5117e5563 in egammaMVACalib::LoadVariables (this=0x1, index=0)
at ../Root/egammaMVACalib.cxx:492
我是在MEM轉儲盯着有不知道是什麼意思,然後你來了,閃耀行,其中之前沒有。謝謝。 –
好,但現在,它怎麼可能?程序如何用'this == 0'調用對象的方法? (它不是一個靜態方法) –
我知道這看起來很奇怪,但方法調用與數據處於不同的空間,並且可以鏈接到一個代碼中,以便知道如何調用該方法 - 我知道這似乎很奇怪,但我已經有了很多。 – Julian