为什么我所有的节点都指向同一个字符数组

Why are all my nodes pointing to the same character array?

本文关键字:同一个 字符 数组 节点 为什么      更新时间:2023-10-16

想知道我是否可以获得有关此单向链表问题的帮助。

所以我有一个简单的结构,带有下一个指针和字符指针来形成每个节点。

struct node{
          char * nodeName;
          node * next;
           }

在我的主函数中,我创建了一个动态分配的字符数组,称为 name,该数组将被发送到一个函数,该函数每次调用时都会创建一个新节点,用户每次都应该输入一个新名称,并且应该分配给创建的每个新节点,但由于某些原因,所有节点都采用输入的最终名称。

我的猜测是所有节点都指向同一个 char 数组,但我不知道如何解决这个问题。这是我的代码。

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.
}

代码确实创建了列表,但所有节点的名称都相同,即用户输入的最后一个字符数组。有什么建议吗?

所有节点都指向同一个字符数组,因为您只分配一个字符数组。那么他们还能指出什么呢?

由于对addNode的每个调用都传递相同的指针,因此当您执行此操作时:

newNode->name = name;//assign user inputed name.

将每个节点的name成员设置为相同的值。这不是你想做的。

你想要做什么取决于你没有向我们展示的代码。可能您想在 addNode 中分配一些内存,将提供的名称复制到其中,并将newNode->name设置为该指针。完成操作后,您必须修改代码以释放节点以释放该内存。

或者,您可以在 addNode 中转让所有权。但是,您应该更改main以每次调用new以分配新的name对象。