Я изучаю C++ и здесь я пытаюсь реализовать функцию pop() стека. Я смущен, когда удалять указатели и как их правильно удалять. Следующий код вызывает ошибку дампа ядра, однако я нашел несколько способов избежать дампа ядра. Проблема в том, что я указываю указатель на другой указатель, и я хочу удалить оба. Если я устанавливаю один на null, я могу удалить оба, но если я укажу один на другой, я не могу удалить оба. Каков соответствующий курс действий здесь и почему я не могу удалить оба, когда один указывает на другой? Кроме того, это не двойной список, и я не отслеживаю второй узел сверху, поэтому мне нужно пройти весь список, чтобы удалить его сверху.Core Dump при удалении указателя C++
Извиняюсь, так как кажется, что этот вопрос часто задают. Существует так много дискуссий, что я не могу разобраться в том, что касается конкретной проблемы.
int List::pop() {
int result = -1;
if (head != NULL) {
result = curr->data;
nodePtr delPtr;
if (curr == head) {
delPtr = head;
head = NULL;
}
else {
nodePtr previousNode = head;
while(previousNode->next != curr) {
previousNode = previousNode->next;
}
delPtr = curr;
curr = previousNode;
curr->next = NULL;
previousNode = delPtr; //previousNode = NULL;?????
delete previousNode; //unecessary?????
}
delete delPtr; //Have to delete this one no matter what
}
else {
cout << "The stack is empty" << endl;
}
return result;
}//END pop