当前位置: 代码迷 >> C语言 >> 简单单链表,却出现了内存不能读,为何?
  详细解决方案

简单单链表,却出现了内存不能读,为何?

热度:158   发布时间:2008-01-07 19:04:04.0
简单单链表,却出现了内存不能读,为何?
我有一个这样的程序(如下),可是出不来结果,提示内存不能读喔~~~
请高手解释一下啊

#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;
----------------解决方案--------------------------------------------------------
喔~~~

你说的是对的呢,我改了。
谢谢你了呢~~~~~~
----------------解决方案--------------------------------------------------------
通过了么?
----------------解决方案--------------------------------------------------------
  相关解决方案