标题:关于while(L)的错误问题(需要运行调试!)
只看楼主
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
结帖率:100%
 问题点数:0 回复次数:2 
关于while(L)的错误问题(需要运行调试!)
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define OVERFLOW 0
#define OK 1
#define ERROR 0
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode;//定义结构体

void mune();
int ClearList_L(LNode *L);
Status InitList_L(LNode *L);
Status CreateList_L(LNode *L,int n);//声明函数

Status InitList_L(LNode *L)
{
    L=(LNode*)malloc(sizeof(LNode));
    if(!L) return OVERFLOW;
    L->next=NULL;
    return OK;
}//初始化
Status CreateList_L(LNode *L,int n)
{
    LNode *p;
    int i;
    if(!L) return ERROR;
    if(L->next) ClearList_L(L);
    for(i=n;i>0;--i)
    {
        p=(LNode*)malloc(sizeof(LNode));
        printf("第%d个结点的数据为:\n",i);
        scanf(" %d",&(p->data));
        p->next=L->next;
        L->next=p;
    }
}
//创建
//遍历
//读取第i个元素
//插入
//删除
//求长度
int ClearList_L(LNode *L)
{
    LNode *LNext;
    while(L==NULL)
    {
        printf("链表为空!");
        return 0;
    }
    while((L->next)!=NULL)
    {
        LNext=L->next;
        free(L);
        L=LNext;
        printf("已清空!");
    }
    return 0;
}//清空
//销毁
void mune()
{
    printf("请输入您选择的操作:\nr.创建\nt.遍历\ng.读取指定元素\ni.插入\nd.删除\nl.求长度\nc.清空\nx.退出程序\n");
}
//目录
int main()
{
    int n;
    char opp;
    LNode *L;
    if(!InitList_L(L)) printf("初始化失败!\n");
        else printf("初始化成功!\n");
    while(1)
    {
        mune();
        scanf(" %c",&opp);
        switch(opp)
        {
            case 'r':
                {
                    printf("请输入创建结点个数:\n");
                    scanf(" %d",&n);
                    CreateList_L(L,n);
                    break;
                }
            case 't':break;
            case 'g':break;
            case 'i':break;
            case 'd':break;
            case 'l':break;
            case 'c':ClearList_L(L);break;
            case 'x':break;
            default: printf("请重新输入!\n");
        }
    }
}

这是一个链表操作程序,运行没问题,第一次输入"r"

或者运行"c",一样的结果。
调试也调试不出来,我用VC++6.0和CFree都试过了,不行啊!
先谢谢各位!
感谢!
搜索更多相关主题的帖子: int next printf case break 
2017-10-08 18:52
农民工
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:21
帖 子:109
专家分:639
注 册:2015-8-22
得分:0 
if(!InitList_L(L)),因为你L没有初始化,可能L=0xcccccccc,执行这个函数后 L仍然为0xcccccccc,还是野指针,要想得到malloc返回的值 ,你想想可以怎么做
2017-10-10 16:52
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
得分:0 
知道了,谢谢!
2017-10-29 15:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-481187-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.168385 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved