0
我使用雙向鏈表創建了一個堆棧結構,並且在彈出列表的最後一個元素時遇到了段錯誤。這裏是彈出方法和一些相關的全局變量:彈出堆棧的唯一成員
typedef struct node {
int value;
struct node *prev;
struct node *next;
} node;
node *head = NULL;
node *tail = NULL;
int stackSize = 0;
int removeFromStack(){
node *tempNode = head;
if(stackSize <= 0){
emptyStackError();
}
int val = head->value;
if(stackSize == 1){
head = NULL; //Segfaults here
tail = NULL;
}
else{
head = head->next;
head->prev = NULL;
}
free(tempNode);
stackSize--;
return val;
}
很顯然,我不應該只是將頭部和尾部設置爲空。我應該做些什麼呢?
堆棧大小爲1的頭部和尾部應該等於堆疊上的單個物體 – brendosthoughts 2013-04-22 20:53:14
@brendanmorrison:它是流行音樂之前的一個*,所以這看起來很好。 – Roddy 2013-04-22 20:54:53
@brendanmorrison:將'head'和'tail'設置爲'NULL'的子句在'if'中,它在檢查'stackSize'之前會減少以指示最後一個對象已被刪除。該代碼將列表清空,而不是將其設置爲具有一個對象。 – 2013-04-22 20:55:04