2014-01-13 124 views
0

我有一个控制台应用程序从控制台读取一些字符数据,然后放入结构中。这个结构被用作链表,当它被构造时,我保持一个指向第一个列表元素的指针和一个用于遍历列表的指针。 发生在我身上的是,当我第一次运行我的列表并将其内容写入控制台时,一切都正常运行。当我以后想要将我的运行指针设置为列表的最后一个元素时,它会因c000005访问冲突错误而崩溃。 我会给你我的代码的有趣的部分:指针导致访问冲突

struct musikdaten { 
    char interpret[150]; 
    char titel[150]; 
    struct musikdaten* next; 
}; 

打印清单的内容:我的结构

定义

while (it != NULL) { 
    cout << it->interpret << ": " << it->titel << "\n"; 
    cout << "next: " << it->next << "\n"; 
    it = it->next; 
} 

设置“它”的名单最后一个元素:

while (true) { 
    if (it->next == NULL) { 
     cout << "Assigning some memory...\n"; 
     it->next = new musikdaten; 
     break; 
    } 
    else it = it->next; 
} 

但是,这最后一部分不断崩溃时列表包含两个以上的元素。 注意:当从控制台读取内容时添加新的列表元素时,下一个指针总是被初始化为NULL。

+0

你是什么COUT'它 - > next', 'it-> next'可以为空 –

+0

将NULL指针检查放在哪里,即使在它上面,不仅仅在它上面 - >接下来,如果它不正确,则写出消息。我似乎无法在这里找到任何错误。 – Dejan

回答

2

你应该NULL初始化next成员指示列表的末尾:

it->next = new musikdaten; 
it->next->next = NULL; 

或者添加一个默认的构造函数:

struct musikdaten { 
musikdaten() { next = NULL; /*TODO: init other members*/}  
char interpret[150]; 
char titel[150]; 
struct musikdaten* next; 
}; 
+0

非常感谢,现在工作! 我知道这是这样的... – user3190009