我有一个控制台应用程序从控制台读取一些char数据,然后放入一个结构中。这个结构用作链表,当它被构造时,我保持一个指针指向第一个列表元素,一个指针用于运行列表。 我发生的事情是,当我第一次浏览我的列表并将其内容写入控制台时,一切都在完美地运行。当我后来想要将我的运行指针设置为列表最后一个元素时,它会随着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;
}
将“it”设置为列表的最后一个元素:
while (true) {
if (it->next == NULL) {
cout << "Assigning some memory...\n";
it->next = new musikdaten;
break;
}
else it = it->next;
}
但是,当列表包含两个以上的元素时,最后一部分会一直崩溃。 注意:当从控制台读取内容时添加新的列表元素时,下一个指针始终初始化为NULL。
答案 0 :(得分:2)
您应该使用next
初始化NULL
成员以指明列表的结尾:
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;
};