为什么我所有的节点都指向同一个字符数组
Why are all my nodes pointing to the same character array?
想知道我是否可以获得有关此单向链表问题的帮助。
所以我有一个简单的结构,带有下一个指针和字符指针来形成每个节点。
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
对象。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 如何在C++中从字符串中分割字符
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 指向指向字符数组的指针数组的指针
- 如何用转义符替换字符串中的所有特殊字符
- 为什么 sscanf 无法从一个字符串中读取uint64_t和字符?
- 比较字符数组
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何在C++中确定文本文件中的元素是字符还是数字
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 为什么我所有的节点都指向同一个字符数组
- 有可能在同一个字符序列上有一个类似函数的宏和一个类似对象的宏吗