2013-12-15 60 views
-1

我在我的節目下面的一段代碼:例外在C++與奇異數印刷

//Get key given pionter 
int SLL::Get(node* pt){ 
    try{ 
     if(pt!=NULL){ 
      node* temp = pt; 
      return temp->key; 
     } 
     else { 
      throw "Access the NULL pointer!!"; 
     } 
    } 
    catch(const char *s){ 
     cout << s << endl; 
     cout << "Invalid input!" << endl; 
    } 
} 

當我測試例外情況下(碼塊),它給我的以下輸出

Access the NULL pointer!! 
Invalid input! 
4704284 

我不明白我在哪裏得到這個號碼?有趣的是,無論我運行多少次這個測試,數字都是一樣的,這意味着它可能不是一個隨機地址。如果我測試了這些非例外情況,那3條線就一起消失了。

所以,我不知道到底發生了什麼。希望有人能幫我解釋一下。謝謝!

+5

這是一個[SSCCE](http://sscce.org)的哭聲。 – chris

+2

輸出該數字的代碼是在上面完成的'catch'後面運行的代碼。您沒有向我們顯示該代碼。 –

+1

我敢打賭,如果您在「catch()」塊中跨過兩個「cout's」,並且沒有在「catch()」塊的外部*步驟中看到「4704284」 ) – paulsm4

回答

1

該函數應該返回int,但您的異常處理路徑沒有return語句。可能是調用這個打印「垃圾」值的代碼。

我想象的東西是調用這個函數像這樣:

key = whatever->Get(); 
cout << key << endl; 

和代碼打印出一個神奇的數字上面,通過SLL::Get()返回。

解決這個問題的一種方法是在SLL::Get()的末尾添加return -1;,因爲如果不返回正確的密鑰,那麼只能到達那裏。