我正在学习C++,在这里我试图实现堆栈的pop()函数。我对何时删除指针以及如何正确删除它们感到困惑。以下代码会导致核心转储错误,但我发现了一些避免核心转储的方法。问题是我指向另一个指针的指针,并且我想要同时删除这两个指针。如果我将其中一个设置为null,则可以将两者都删除,但如果我将其中一个指向另一个,则不能同时删除这两个。这里有什么适当的行动方式,为什么我不能在指向另一方时删除它们?此外,这不是一个双向链表,并且我没有跟踪顶端的第二个节点,所以我必须遍历整个列表以从顶端删除。删除指针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