链接列表打印NULL - C ++

时间:2016-06-18 20:33:03

标签: c++ printing linked-list

所以,我正在处理这个链表分配,并且非常感谢有关打印出链表的元素的一些帮助。 到目前为止,我已经使用数组来定义链表的值,但每当我尝试使用单独的打印函数打印头值时,它总是出现NULL。现在我认为这可能与一些全球性和地方性问题有关,但我不确定。如果是范围问题,那么关于如何全局定义链表值的一些建议将非常受欢迎。

下面是我的打印功能和构建功能的代码。我现在想要完成的就是从print函数中打印出构建函数中定义的头值。头部值似乎通过构建函数是一致的,但是一旦执行print函数,它就变为NULL。 有什么想法吗?

void CommunicationNetwork::buildNetwork(){
    std::string a[10] = {"Los Angeles","Phoenix", "Denver", "Dallas","St. Louis", "Chicago", "Atlanta", "Washington, D.C.", "New York", "Boston"};
    City *head = new City;
    head ->cityName=a[0];
    head ->next = NULL;

    City *current = head;
    int i =1;
    while(i<10){

        City *tmp = new City;

        tmp ->cityName = a[i];
        tmp ->next = NULL;
        current ->next = tmp;
        current = current->next;
        i++;
    }

    City *tail = current;
    City *tmp2 = new City;
    tmp2 = head;
    current = tmp2;
    //cout<<"head = "<<head->cityName<<endl;

    while(current != NULL){
        cout<<current->cityName<<" -> ";
        current = current->next;
    }
    if(current == NULL){
        cout<<"NULL"<<endl;
    }
    cout<<head->cityName<<endl;
}
void CommunicationNetwork::printNetwork(){
    cout<<"===Current Path==="<<endl;
    cout<<head->cityName<<endl;
    cout<<"=================="<<endl;
}

1 个答案:

答案 0 :(得分:0)

我生锈的水晶球说你的班级有一个名为head的成员。但是,您没有在CommunicationNetwork::buildNetwork中触及此成员。相反,您创建一个全新的局部变量

City *head = new City;

在整个函数中使用它,并在thge函数结束时放弃它。要使用您的类成员,请将上面的内容替换为

head = new City;

如果您的班级有一个名为tail的成员,这也适用于此。

虽然我们正在使用此片段

City *tmp2 = new City;
tmp2 = head;

你分配一个City对象并立即忘记它,造成内存泄漏。