在 C 中,这个基本堆栈实现提供分段 fault.How 来修复它?
In C this basic stack implementation gives segmentation fault.How to fix it?
在C:
中使用链表创建堆栈实现
具有 2 个字段值和下一个指针(指向链表中的下一个节点)的结构节点。此处为基于链表的实现定义了堆栈函数 -pop、push 和 peek。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* next;
};
void push(struct node** l,int val)//push operation
{
struct node* t=(struct node*) malloc( sizeof(struct node));
t->data=val;
t->next=*l;
*l=t->next;
printf("pushed:%d\n",val);
}
int is_empty(struct node** l)//check stack_empty
{
printf("hai1");
return (*l)==NULL;
}
void pop(struct node** l)//pop operation
{
if(!is_empty(l))
{
printf("hai");
struct node* temp=*l;
(*l)=(*l)->next;
printf("popped:%d\n",temp->data);
free(temp);
}
}
void peek(struct node* l)//peek function
{
printf("peeked: %d\n", l->data);
}
int main()
{
struct node* l=NULL;
push(&l,10);
push(&l,20);
pop(&l);
peek(l);
return 0;
}
如何修复使用gcc 4.8.2 C编译器编译时代码中的段错误?
void push(struct node** l,int val)//push operation
{
struct node* t=(struct node*) malloc( sizeof(struct node));
t->data=val;
t->next=*l;
*l=t; // <----------------- Not *l=t->next;
printf("pushed:%d\n",val);
}
在C:
中使用链表创建堆栈实现具有 2 个字段值和下一个指针(指向链表中的下一个节点)的结构节点。此处为基于链表的实现定义了堆栈函数 -pop、push 和 peek。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node* next;
};
void push(struct node** l,int val)//push operation
{
struct node* t=(struct node*) malloc( sizeof(struct node));
t->data=val;
t->next=*l;
*l=t->next;
printf("pushed:%d\n",val);
}
int is_empty(struct node** l)//check stack_empty
{
printf("hai1");
return (*l)==NULL;
}
void pop(struct node** l)//pop operation
{
if(!is_empty(l))
{
printf("hai");
struct node* temp=*l;
(*l)=(*l)->next;
printf("popped:%d\n",temp->data);
free(temp);
}
}
void peek(struct node* l)//peek function
{
printf("peeked: %d\n", l->data);
}
int main()
{
struct node* l=NULL;
push(&l,10);
push(&l,20);
pop(&l);
peek(l);
return 0;
}
如何修复使用gcc 4.8.2 C编译器编译时代码中的段错误?
void push(struct node** l,int val)//push operation
{
struct node* t=(struct node*) malloc( sizeof(struct node));
t->data=val;
t->next=*l;
*l=t; // <----------------- Not *l=t->next;
printf("pushed:%d\n",val);
}