Вы не должны удалять свои temp
в push
! Это часть списка. Поэтому, когда вы получите доступ к этим данным позже, вы обязательно получите исключение.
Во-вторых, вы должны инициализировать pred
с NULL
в pop()
, в противном случае вы получите неопределенное значение, назначенное theTop
, если в стеке содержится только 1 элемент.
В-третьих, вы должны удалить в pop()
Узел, выделенный вами в push()
.
В целом ваш подход выглядит не очень эффективным. Вы должны лучше хранить указатели в другом направлении: от верха стека до нижних предметов. Таким образом, вам не нужно обходить весь стек на каждом pop()
. Ваш код будет примерно таким:
void push(data)
{
allocate new top
new top's next is the old top
store new top in the class
}
void pop()
{
if empty, ERROR;
new top = old top's next
deallocate old top
}
Обратите внимание, что вам вообще не нужен theFront
.