求助 (我使用的是turbo c 3.0 编译器

来源:百度知道 编辑:UC知道 时间:2024/09/28 08:07:43
#include<stdio.h>
#include<malloc.h>

struct mstack{
int data;
struct mstack * next;
};

void create(struct mstack * l){
l=(struct mstack *) malloc(sizeof(struct mstack));
l->data=55555; //
l->next=0;
}

void push(int e,struct mstack * l){
struct mstack * p;
p=(struct mstack *) malloc(sizeof(struct mstack));
p->next=l->next;
p->data=e;
l->next=p;
free(p);
}

void main(){
struct mstack * l;
int numb;
int i;
create(l);
printf("length=%d",l->data); //?????这里输出应该是 55555 呀 调试时却是 767

for(i=0;i<4;i++){
scanf("%d",&numb);
push(numb,l);
}

scanf("%d",&numb);
}

粗略看了一下,你的这个程序问题挺多的,
void create(struct mstack * l)//这里应该修改为:struct mstack *creat(struct mstack *l)表示要返回指针(栈首地址);
{
l=(struct mstack *) malloc(sizeof(struct mstack));
l->data=55555; //int范围只能是-32768到32767;
l->next=0; //这里常用l->next=NULL;
//后面再加上return l;
}

void push(int e,struct mstack * l){
struct mstack * p;
p=(struct mstack *) malloc(sizeof(struct mstack));
p->next=l->next;
p->data=e;
l->next=p;
free(p); //这个程序是入栈,所以p要保留;删去free(p);
}

void main(){
struct mstack * l;
int numb;
int i;
create(l); //这里修改为:l=create(l); 表示接受返回的栈首地址.
printf("length=%d",l->data); //?????现在应该明白为什么会出错了吧,第一,creat函数没有返回地址;第而:l->data超出整型int的范围了;
for(i=0;i<4;i++){
scanf("%d",&numb);
push(numb,l);
}