指针导致访问冲突

时间:2014-01-13 11:39:57

标签: c++ pointers

我有一个控制台应用程序从控制台读取一些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。

1 个答案:

答案 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;
};