gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-27 23:46:07 25 4
gpt4 key购买 nike

我是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com