简单单链表,却出现了内存不能读,为何?
我有一个这样的程序(如下),可是出不来结果,提示内存不能读喔~~~请高手解释一下啊
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#include "malloc.h"
#include "string.h"
#define NULL 0
typedef struct node
{
char name[10];//进程名称
int needtime;//进程完成的时间
int cputime;//占用CPU时间
char state;//进程状态
struct node *next;
}PCB;
int N;
node *create();
void disp(node *head);
node *create()
{
PCB *head,*p,*q;
int i;
char name1[10];
int needtime1;
head=(node *)malloc(sizeof(node));
if (head==NULL)
{
printf("内存分配错误,退出!");
exit(-1);
}
head->next=NULL;
p=head;
for (i=0;i<N;i++)
{
printf("请输入第[%d]个进程的信息:\n",i+1);
q=(node *)malloc(sizeof(node));
if (q==NULL)
{
printf("内存分配错误,退出!");
exit(-1);
}
printf("进 程 名 称 :");
scanf("%s",name1);
strcpy(q->name,name1);
printf("进 程 所 需 要 时 间:");
scanf("%d",&needtime1);
q->needtime=needtime1;
q->cputime=0;
q->state='W';
p->next=q;
p=q;
printf("\n");
}
return head;
}
void disp(node *head)
{
PCB *p;
p=head->next;
if (p==NULL)
{
printf("链表为空,无法输出!\n");
exit(-1);
}
else
{
printf(" NAME CPUTIME NEEDTIME STATUS\n");
while(p)
{
printf(" %s\t%d\t%d\t%c\n",p->name,p->cputime,p->needtime,p->state);
p=p->next;
}
}
printf("\n");
}
int main(void)
{
PCB *head;
printf("\n\t\t\t\t\t 先 来 先 服 务 算 法\n\n");
printf("\t\t\t\t\t\t ------网络0501谷文杰\n");
KK:printf("\n\n请输入进程控制块的总数(小于10):");
scanf("%d",&N);
if (N>10)
{
printf("您输入的数目过大,请重新输入...");
goto KK;
}
printf("\n");
head=create();
disp(head);
system("pause");
return 0;
}
----------------解决方案--------------------------------------------------------
怎么又goto~还有用完了怎么不free()?你的链表打印好像又些问题,创建表也又问题:
打印处: p=head->next; 改为 p=head;
创建表处: 最后一个结点的next域没有设置,在return前面加上p-next=null;
----------------解决方案--------------------------------------------------------
喔~~~
你说的是对的呢,我改了。
谢谢你了呢~~~~~~
----------------解决方案--------------------------------------------------------
通过了么?
----------------解决方案--------------------------------------------------------