gpt4 book ai didi

c - C 中的动态堆栈 [pop crash]

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

我正在编写一个程序,使用动态堆栈将十进制 int 转换为二进制。它在最后一次弹出时崩溃。前任。数量:4 输出:10crash

#include <stdio.h>

struct stack {
struct stack *prev;
int val;
struct stack *next;
};
struct stack *first,*cur,*tmp;
struct stack *GETNODE(){
struct stack *pt = (struct stack *)malloc(sizeof(struct stack));
};
int counter=1;
void push(int val){
tmp=GETNODE();
tmp->prev=NULL;
tmp->val=val;
tmp->next=NULL;
if(first==NULL){
first=tmp;
cur=first;
}else{
tmp->prev=cur;
cur->next=tmp;
cur=tmp;
}
counter++;
};

int pop(){
int val=tmp->val;
cur=tmp->prev;
free(tmp);
tmp=cur;
tmp->next=NULL;
counter--;
return(val);
};


main(){
int num = 4;
while(num!=0){
push(num%2);
num/=2;
}
while(counter!=1){
printf("%d ",pop());
}
}

最佳答案

问题出在你的 pop 函数上。如果你考虑一下它是如何运作的,在最后一遍你将释放(tmp),它当前指向第一个项目。释放它后,您可以分配:

tmp->next=NULL;

此时您正尝试取消引用无效指针。

关于c - C 中的动态堆栈 [pop crash],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28385654/

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