【发布时间】:2014-04-22 21:36:55
【问题描述】:
我目前正在处理堆栈。我应该使用以下结构和函数原型:
typedef struct node_{
char data;
struct node_ *next;
}node;
typedef struct stack_{
unsigned int size;
node* stack;
}stack;
stack* create_stack();
void push(stack* s, char val);
这是我的 create_stack() 和 push() 的实际代码:
stack* create_stack()
{
stack *stack;
stack = malloc(sizeof(stack));
stack->size = 0;
stack->stack = NULL;
return stack;
}
void push(stack* s, char val)
{
stack *newStack;
newStack = create_stack();
newStack->stack->data = val;
newStack->stack = s->stack;
s = newStack;
}
当我尝试将 char val 存储到 newStack->stack->data 时出现分段错误。这怎么行不通?我需要做什么才能使这个堆栈在顶部???
【问题讨论】:
-
很明显,
newStack->stack是NULL,但您使用->data取消引用它。 -
您肯定不想在每次推送时创建一个新堆栈,不是吗?
-
你是在堆还是栈上分配?它看起来像堆
-
@GIJoe 在堆栈上分配和创建堆栈是完全不同的事情
-
@vlad_tepesch 堆栈是一个概念,而不是特定的实现。如果元素在头部被压入和弹出,则单链表会形成一个很好的堆栈。此外,这听起来像是需要 OP 才能使用此结构的分配,因此推荐一个数组也无济于事。
标签: c segmentation-fault stack