2012-05-11 61 views
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 

回答

8

如果你看一下幀#5你this指針爲空。這意味着問題從那裏開始。斷言在斷言只是repurcusion!

+0

我是在MEM轉儲盯着有不知道是什麼意思,然後你來了,閃耀行,其中之前沒有。謝謝。 –

+0

好,但現在,它怎麼可能?程序如何用'this == 0'調用對象的方法? (它不是一個靜態方法) –

+1

我知道這看起來很奇怪,但方法調用與數據處於不同的空間,並且可以鏈接到一個代碼中,以便知道如何調用該方法 - 我知道這似乎很奇怪,但我已經有了很多。 – Julian

2

的線索是在這裏:

#5 egammaMVACalib::checkTree (this=0x0) at ../Root/egammaMVACalib.cxx:751 

此= 0意味着你的對象爲空