链接列表 - Dos错误

时间:2014-01-20 17:24:26

标签: c++

我有一个txt格式的列表。我需要创建一个链表并将文件的每一行的每个数据放在那里。 我编写了一个代码,但在运行之后,Dos停止工作("程序停止工作......")。 谁能告诉我错误在哪里?

    struct node
    {
       string data;
       node *pas;
    };

int main()
{
    struct node *koke;
    struct node *tmp;
    koke = NULL;
    string CH;
    ifstream infile;

    infile.open ("Liste_1.txt~");

    tmp = new node;
    tmp = koke;

    int i=0; 
    while(i<rr) //rr is defined as a constant
    {
       getline(infile,CH);
       tmp->data = CH;
       tmp = tmp->pas;
       i++;
    }

谢谢,

2 个答案:

答案 0 :(得分:1)

以下是我发现的一些问题:

tmp = new node;
tmp = koke;

哪个作业声明? 您将动态分配的对象分配给tmp,然后重新分配tmp,从而丢失动态分配的对象。

while(i<rr) //rr is defined as a constant
{
   getline(infile,CH);
   tmp->data = CH;
   tmp = tmp->pas;
   i++;
}

您永远不会分配另一个节点。您将第一个值分配给tmp,然后移动tmp指针而不分配任何新节点 顺便说一句,tmp-pas的价值是多少? (调试器可以帮助您回答这个问题。)

由于您在自己的链接列表中遇到这个问题,我建议您使用已经过测试的std::list

否则,请搜索StackOverflow中的“c ++链表”以获取一些示例。

编辑1 - 阅读文件
您不应该使用常量作为文件中的行数。该文件位于程序外部,无法信任您在程序中定义的行数 搜索StackOverflow的“c ++文件结束”,了解如何读取文件中的所有行,无论大小如何。

答案 1 :(得分:0)

首先您将NULL分配给koke,然后将koke分配给tmp,最后您尝试修改tmp / koke成员data。移除tmp = koke;并在tmp->pas = new node;之后添加tmp->data = CH;,它应该可以使用(但代码通常非常糟糕)。