C++ 为什么我的所有节点都指向同一个字符数组?
我想知道我是否能在这个单链表问题上得到帮助 所以我有一个简单的结构,每个节点都有一个下一个指针和一个字符指针C++ 为什么我的所有节点都指向同一个字符数组?,c++,arrays,list,pointers,C++,Arrays,List,Pointers,我想知道我是否能在这个单链表问题上得到帮助 所以我有一个简单的结构,每个节点都有一个下一个指针和一个字符指针 struct node{ char * nodeName; node * next; } 在我的主函数中,我创建了一个名为name的动态分配字符数组,该数组将被发送到一个函数,该函数每次调用时都会创建一个新节点,用户每次都会输入一个新名称,并将其分配给创建的每个新节点,但由于某些原因,所有节点都使用输入的最终名称 我猜所有的
struct node{
char * nodeName;
node * next;
}
在我的主函数中,我创建了一个名为name的动态分配字符数组,该数组将被发送到一个函数,该函数每次调用时都会创建一个新节点,用户每次都会输入一个新名称,并将其分配给创建的每个新节点,但由于某些原因,所有节点都使用输入的最终名称
我猜所有的节点都指向同一个字符数组,但我不知道如何解决这个问题。这是我的密码
int main()
{
char * name = new char[MAX_SIZE]; // dynamic array declaration;
for(int i = 0; i < 3; ++i) // do it x number of times.
{
cout << "Enter Node Name" << endl;
cin.get(name, MAX_SIZE, '\n');
cin.ignore(200, '\n');
addNode(name);
}
return 0
}
void addNode(name[])
{
if(!head){ // creates a first node,
head = new node;
head->next = NULL;
head->nodeName = "default node";
}
node * current = head;
node * newNode = new node;
newNode->name = name;//assign user inputed name.
newNode->next = NULL // set next pointer to null
while(current->next)
current = current->next; // traverse to the last node;
current->next = newNode; // connect the new node at the end.
}
intmain()
{
char*name=new char[MAX_SIZE];//动态数组声明;
对于(int i=0;i<3;++i)//执行x次。
{
cout nodeName=“默认节点”;
}
节点*电流=头部;
node*newNode=新节点;
newNode->name=name;//分配用户输入的名称。
newNode->next=NULL//将下一个指针设置为NULL
while(当前->下一步)
当前=当前->下一步;//遍历到最后一个节点;
当前->下一步=新节点;//在末尾连接新节点。
}
代码确实创建了列表,但所有节点的名称都是相同的,即用户输入的最后一个字符数组。
有什么建议吗?您的所有节点都指向同一个字符数组,因为您只分配了一个字符数组。那么他们还能指出什么呢 由于对
addNode
的每次调用都传递相同的指针,因此执行此操作时:
newNode->name = name;//assign user inputed name.
将每个节点的名称成员设置为相同的值。那不是你想做的
你想做什么取决于你没有向我们展示的代码。您可能希望在addNode
中分配一些内存,将提供的名称复制到其中,然后将newNode->name
设置到该指针。您必须修改代码以释放节点,以便在处理完该节点后释放该内存
或者,您可以在addNode
中转移所有权。但是,您应该将main
更改为每次调用new
来分配新的name
对象。您需要在addNode中复制name。最简单的方法是将nodeName设置为std::string或者,在循环中移动char*name=new char[MAX\u SIZE]
。老实说,使用std::string确实是正确的方法。非常感谢。这完全解决了问题。