gpt4 book ai didi

c - 弹出堆栈的唯一成员

转载 作者:行者123 更新时间:2023-11-30 15:49:41 26 4
gpt4 key购买 nike

我使用双向链表在 C 中构建了一个堆栈结构,在弹出列表的最后一个元素时遇到了段错误。这是 pop 方法和一些相关的全局变量:

typedef struct node {

int value;
struct node *prev;
struct node *next;

} node;

node *head = NULL;
node *tail = NULL;
int stackSize = 0;

int removeFromStack(){
node *tempNode = head;

if(stackSize <= 0){
emptyStackError();
}

int val = head->value;

if(stackSize == 1){
head = NULL; //Segfaults here
tail = NULL;
}

else{
head = head->next;
head->prev = NULL;
}

free(tempNode);
stackSize--;
return val;
}

很明显,我不应该只是将头部和尾部设置为空。我应该做什么?

最佳答案

错误不太可能出现在你说的地方。您只需为指针分配一个值即可。我的猜测是它来自上面的两行。

之前:

int val = head->value;

请添加:

assert(head != NULL && "Oops, the counter is messed up");

并尝试再次运行您的代码。

如果断言触发,则跟踪 stackSize 的所有使用情况。如果不是,则不一定意味着指针不是随机的,或者指向已取消分配的空间。在此函数中注释除 head->value 之外的所有内容。然后尝试创建一个列表,推送一个元素,然后尝试调用 removeFromStack。然后尝试压入两个元素,弹出一个元素,然后再次尝试 removeFromStack

我的猜测是你的计数器在另一个函数中的某个地方被损坏了。

关于c - 弹出堆栈的唯一成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16156470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com