a372187663 发表于 2014-5-25 21:45:37

C++外接循环创建单链表

void LinkList::Init(LNode *L)
{
        L = new LNode;
        L->next =NULL;
}
void LinkList::LNodeCreat(LNode *L,int date)
{
        LNode *p;
        p = new LNode;
        p->data = date;
        L->next =p;
        L = p;
      L->next =NULL;
}
这两个函数是在下面这个循环内调用
        while(!(fins->eof()))
        {
                getline(*fins,str1);
                n1 = atoi(str1.c_str());
                List.LNodeCreat(L,n1);
                count++;
        }
一开始就初始化了,为什么调试的时候显示的是红色字体错误,
错误信息为 :   0xC0000005: Access Violation.
求帮忙解决问题啊!

elvo 发表于 2014-5-25 21:45:38

没有全代码自己不能调试,不知道具体原因。。。不过问一下while循环里的 List.LNodeCreat(L,n1);这个L是什么数据类型,我感觉是不是应该写成 List.LNodeCreat(&L,n1);取地址符。

a372187663 发表于 2014-5-26 14:29:47

我修改了方法,先把str中的值赋给一个数组,然后在void LinkList::LNodeCreat(LNode *L,int date[],int count)内循环赋值。
还有一个问题就是我在这个函数里面调用单链表
void Diary::Show_Diary(string Account)//日记日期列表
{
    ​。。。。。
    ​List.LNodeCreat(L,n,count);//n为数组
    ​List.SortList(L,count);    ​
    ​List.PrintList(L);
    ​List.ClearList(L);
    ​。。。。。
}
在这个函数里调用删除方法,但是错了。
void Diary::Delete_Diary(string FileName)
{
    ​。。。。。
    ​List.DeleteDate(L,count_diary,n);//n为要删除的数据
    ​。。。。。
}
另外定义了全局变量 LNode *L = NULL;
void LinkList::DeleteDate(LNode * L,int count,int date)
{
    ​int j = 1;
    ​LNode *p,*q;
    i​nt str;
    ​p = L;
    ​while(p->next->data != date&& j<count)//这里出错.还未进入循环.
    ​{
      ​​p = p->next;
       ​ ​++j;
    ​}
    ​q = p->next;
    ​p->next = q->next;
    ​str = q->data;
    ​free(q);
}
我改成引用的也不行。Debug下是p->next的值是0x00000000,data跟next都是没有被赋值.
0xC0000005: Access Violation.错误信息

ravenhu13 发表于 2014-5-26 18:48:56

指针赋值错了,你自己好好检查一下。

a372187663 发表于 2014-5-27 16:34:55

elvo 发表于 2014-5-27 13:28 static/image/common/back.gif
没有全代码自己不能调试,不知道具体原因。。。不过问一下while循环里的 List.LNodeCreat(L,n1);这个L是什么 ...

我现在又改方法了,而且糊里糊涂改好了- -。。。。嘿嘿 ~~~
页: [1]
查看完整版本: C++外接循环创建单链表