【发布时间】:2019-06-09 11:27:38
【问题描述】:
我想显示字符串“Jimmy”但什么也没有出现。我的错误是什么?
#include<iostream>
#include<string>
struct Node
{
std::string s;
Node* next;
};
struct Node* head = NULL;
void insert(const std::string& name)
{
struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
newnode->s = name;
newnode->next = NULL;
head = newnode;
}
void display()
{
struct Node* ptr;
ptr = head;
while (ptr != NULL) {
std::cout << ptr->s << std::endl;
}
}
int main()
{
insert("Jimmy");
display();
return 0;
}
此代码中未显示任何输出。请给一些建议。我还是这个数据结构的新手。
【问题讨论】:
-
您似乎是一名 C 程序员,正在转向 C++。这两种语言是截然不同的。所以我建议不要过多依赖你的 C 知识,并从our curated book list 中挑选一本书。
-
如果你需要一个链表,你应该使用std::list。但是,在大多数情况下,链表是一种非常低效的数据结构,通常使用std::vector 会更好。还; 不要在 C++ 中使用
malloc,并且更喜欢nullptr而不是NULL。 -
在我的机器上按原样运行代码会导致无限循环不断打印
Jimmy。我认为这是因为在display中,您没有将ptr推进到ptr->next。 -
第一个错误是使用
malloc。您不能使用malloc分配非平凡的C++ 类型,std::string就是其中之一。根据经验,永远不要使用malloc或free。
标签: c++ struct linked-list new-operator singly-linked-list