【发布时间】:2016-06-29 12:50:21
【问题描述】:
我在实现从堆栈中删除第一个元素的函数时遇到问题。 (我确定堆栈至少有两个元素)
typedef struct Node {
T value;
struct Node *next;
} Node;
typedef struct Stack {
Node *head;
} Stack;
void Pop(Stack **st) {
if (!IsEmptyStack(*st)) {
Node* aux = (*st)->head;
(*st)->head = (*st)->head->next;
}
}
但同样的事情也会发生...Segmentation fault.
如何修复弹出功能?
以下是我正在使用的其他功能:
void InitStack(Stack **st)
{
(*st) = (Stack *) malloc(sizeof(Stack *));
(*st)->head = NULL;
}
int IsEmptyStack (Stack *st)
{
if (!st)
return 1;
else
return 0;
}
【问题讨论】:
-
为什么你要传递 **st 而不是 *st ?
-
代码看起来不错(因为不应该导致段错误)。问题可能出在创建堆栈的代码中。
-
@JoulinRouge 这是学校作业,我不能修改函数的定义
-
可能问题出在程序的其余部分,您是否尝试过调试?它到底停在哪里?
-
可能传递了
Stack**,因为这个Stack定义可能基于单链表的定义,在这种情况下,处理指向指针的指针会在许多情况下产生非常优雅的代码案例。
标签: c pointers segmentation-fault stack