2016-02-19 109 views
-1
 void pop() 
     { 
      //create new temp node 
      struct PersonNode *temp; 
      //if stack is empty 
      if(top==NULL) 
      { 
       cout<<"nThe stack is empty!!!"; // show message 
      } 
      temp=top; // store the top at temp 
      top=top->next; // make the top previous to current top 
      delete temp; // delete the temp (current top) 
     } 

這是我用來彈出堆棧的代碼,除了當堆棧是空的,我嘗試彈出它崩潰,我認爲它由於這條線 top = top-> next;如果topNULLC++堆棧函數和錯誤處理

+2

如果你仍然做同樣的事情,那麼NULL檢查是什麼? – Michael

+1

你不需要'struct PersonNode * temp;'中額外的'struct',並且應該將它移到實際分配它的地方(或初始化爲'nullptr')。 – crashmstr

+1

此外,您還需要一個'else'(如果堆棧爲空,您*不會做出更改)。 – crashmstr

回答

0

這是你的代碼清理了一下(只需在需要的地方聲明temp並立即初始化,並防止在else子句的空棧上工作)。

void pop() 
{ 
    //if stack is empty, show message and stop 
    if(!top) 
    { 
     cout<<"nThe stack is empty!!!"; 
    } 
    else //else stack is not empty, pop 
    { 
     PersonNode *temp = top; 
     top = top->next; 
     delete temp; 
    } 
} 
0
top=top->next; 

會失敗,所以你應該簡單地返回而不執行語句的其餘部分在功能:

if(top==NULL) { 
    cout<<"nThe stack is empty!!!"; // show message 
    return; // <<<<<<<<<<<<<< 
} 
+0

沒有該代碼該函數不再彈出 temp = top; //將頂部保存在溫度爲 top = top-> next; //使當前頂部的頂部前 刪除臨時; //刪除temp(當前頂部) – Danny

+0

@Danny好吧,請發佈[MCVE]。這可能有助於診斷您的真實問題。 –

+0

_「沒有該代碼,該函數不再彈出'temp = top';」_該分配不相關。 –

0

topNULL

if(top==NULL) 
    { 
     cout<<"nThe stack is empty!!!"; // show message 
     return;//You Should return from here 
    } 
您應該返回

希望這有助於。