c - 弹出栈C中的头元素

标签 c pointers segmentation-fault stack

我在实现从堆栈中删除第一个元素的函数时遇到问题。 (我确信堆栈至少有两个元素)

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;

    }
}

但同样的情况发生...段错误。

如何修复弹出功能?

以下是我正在使用的其他功能:

void InitStack(Stack **st)
{
    (*st) = (Stack *) malloc(sizeof(Stack *));
    (*st)->head = NULL;

}

int IsEmptyStack (Stack *st)
{
    if (!st)
        return 1;
    else
        return 0;
}

最佳答案

第一种方法似乎是正确的,但为什么要将一个指向 Stack 的双指针传递给函数 Pop 呢?看来 Pop 可以这样简化:

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 = aux->next;
        ... // dispose of aux appropriately
    }
}

关于c - 弹出栈C中的头元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35988277/

相关文章:

c - 数组与常量指针一样还是有其他区别?

c - 未发现泄漏时调试段错误的技巧

c - 打印 ASCII 字符的二进制

c - 遍历文件并将信息添加到字符串数组 - C

c - 在 Microsoft Windows 平台上进行调试

C++:动态共享库中的虚函数产生段错误

c - 使用结构体分配内存时出现段错误

C 库代码的正确命名约定

c++ - 将 &变量传递给函数意味着什么?例如, string& insert ( size_t pos1, const string& str );

c - 如何访问另一个结构体中的结构体字段指针并正确写入?