c++ - 简单链表C++函数调用后指针自动改变

标签 c++ linked-list

我是 C++ 的初学者,我正在用 C++ 实现简单的链表。当我尝试向列表中添加第二个元素时,头部中下一个元素的指针正在改变

int main()
{
    LinkedList ll;
    string test;
    test="we";
    ll.add("we");
    ll.add("are");
    cout << "ok working" << endl;
    return 0;
}

class LinkedList
{
    public:
        LinkedList();
        void add(string data);
    protected:
    private:
        class node{
        private:
            string data;
        public:
            node *next;
            node(string data,node *next);
            node(string data);
            node();
        };

        node *head;
};

LinkedList::LinkedList()
{
    head=NULL;
    cout<<"ok";
}


void LinkedList::add(string data){
    if(!head){
        node tmphead(data,NULL);
        this->head=&tmphead;
    }else{
        node *temp;
        temp=head;
        while(temp->next){
            temp=temp->next;
        }
        node newnode(data);
        temp->next=&newnode;
    }
}
LinkedList::node::node(string data,node *next){
    LinkedList::node::data=data;
    LinkedList::node::next=next;
cout<<"New node created with : "+data<< endl;

}
LinkedList::node::node(){
    LinkedList::node::data="";
    LinkedList::node::next=NULL;
    //LinkedList::node::
//this->data="";
//this->next=NULL;
}
LinkedList::node::node(string data){
LinkedList::node::data=data;
LinkedList::node::next=NULL;
}

加“我们”时,head->next为0x0。一旦控件再次转到“are”的添加函数,head->next 就是 0x3。它会自动获取更改。

非常感谢任何帮助。

最佳答案

问题是您在不使用动态内存的情况下构建动态结构。变量 tmphead 和 newnode 的生命周期仅限于 add() 调用,因此它们的地址在退出时变为无效。请查看一些教程中的新部分和删除部分

关于c++ - 简单链表C++函数调用后指针自动改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50471165/

相关文章:

c++ - Windows C++ 应用程序崩溃

c++ - 如何遍历 float 的​​精确表示?

c++ - 指针的两种不同类型的星号位置?

c++ - 反向链表的递归函数(代码片段解释)

c - 如何修复这些无效的参数类型(链接列表/结构)并确保它们不会再次发生?

c++ - 静态链接 C++,找不到库

c++ - 使用来自 streambuf 的 boost::asio::ip::tcp 将数据部分写入 TCP 套接字

list - 链表分区函数和反转结果

c - C 中的简单链表实现

java - Java中递归地反转链表