我有一个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++;
}
谢谢,
答案 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;
,它应该可以使用(但代码通常非常糟糕)。