首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

大神,这段小代码运行结束后总是崩溃,该如何该呢?多谢

2012-10-16 
请教各位大神,这段小代码运行结束后总是崩溃,该怎么该呢?谢谢#includestdio.h#includestdlib.h#define

请教各位大神,这段小代码运行结束后总是崩溃,该怎么该呢?谢谢
#include<stdio.h>
#include<stdlib.h>


#defineFALSE0
#defineOK1
#defineERROR0


typedefintStatus;
typedefint ElemType;


typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;

Status InitList_L(LinkList L);//初始话链表,返回头指针Head
LinkList CreatList_L(LinkList L, int n);//逆位序输入n个元素的值,建立带头结点的单链表L
void PrintLinkList_L(LinkList L);//输出链表

Status InitList_L(LinkList L)
{
L = (LinkList)malloc(sizeof(LNode));
if (L == NULL)
{
exit(ERROR);
}
L->next = NULL;
printf("初始化成功!\n");
return OK;
}
LinkList CreatList_L(LinkList L, int n)
{
int i = 0;
LNode *p = NULL;

printf("请依次输入%d个数据:\n", n);
for (i = n; i > 0; i --)
{
p = (LinkList)malloc(sizeof(LNode));
scanf("%d", &p->data);
p->next = L->next;
L->next = p;
}
printf("输入完成!\n");
}
void PrintLinkList_L(LinkList L)
{
LinkList p = L->next;
while (p != NULL)
{
printf("%4d", p->data);
p = p->next;
}
printf("\n");
}

Status main(void)
{
int n;
LNode L;
InitList_L(&L);
printf("请输入要输入数据的个数:");
scanf("%d", &n);
CreatList_L(&L, n);

PrintLinkList_L(&L);

return 0;
}

[解决办法]
问题在于InitList_L这里有问题.
InitList_L的参数是LinkList.但函数的行为却是把参数当做LinkList*用.
要么把 InitList_L 里的分配动作去掉改成直接初始化对象.
要么把 LNode L;这里改成LinkList L; InitList_L参数改成LinkList*.

你现在的代码,初始化是无用的.因为你只是初始化了函数内分配的对象.但这个对象在后面使用的过程中被丢弃了.而main里的LNode L还是未初始化状态.所以最后PrintLinkList_L的时候访问了非法的内容.
最简单的改法:
Status InitList_L(LinkList L)
{
L->next = NULL;
printf("初始化成功!\n");
return OK;
}

[解决办法]

C/C++ code
Status InitList_L(LinkList L){    /*L = (LinkList*)malloc(sizeof(LNode));    if (L == NULL)    {        exit(ERROR);    }*/    L->next = NULL;    printf("初始化成功!\n");    return OK;}LinkList CreatList_L(LinkList L, int n){    int i = 0;    LNode *p = NULL;    printf("请依次输入%d个数据:\n", n);    for (i = n; i > 0; i --)    {        p = (LinkList)malloc(sizeof(LNode));        scanf("%d", &p->data);        p->next = L->next;        L->next = p;    }        printf("输入完成!\n");    return L;}void PrintLinkList_L(LinkList L){    LinkList p = L->next;    while (p != NULL)    {        printf("%4d", p->data);        p = p->next;    }    printf("\n");}Status main(void){    int n;    LNode L;        InitList_L(&L);    printf("请输入要输入数据的个数:");    scanf("%d", &n);    CreatList_L(&L, n);    PrintLinkList_L(&L);    return 0;} 

热点排行