【发布时间】:2016-07-19 21:36:41
【问题描述】:
我正在尝试在 C++ 中从头开始实现一个单链表,到目前为止,我的第一个方法 append():
#include <iostream>
using namespace std;
struct ListNode{
int key_value;
ListNode *next;
};
class List{
public:
List();
void append(int key);
private:
ListNode *head;
ListNode *tail;
};
List::List(){
head = NULL;
tail = head;
}
void List::append(int key){
ListNode *newnode;
newnode->key_value = key;
newnode->next = NULL;
if(head == NULL){
head = newnode;
tail = head;
}
else{
tail->next = newnode;
tail = newnode;
}
return;
}
int main(){
try{
List l1;
l1.append(1);
//l1.append(2);
//l1.append(3);
//l1.append(5);
}
catch (exception const& ex) {
cerr << "Exception: " << ex.what() <<endl;
return -1;
}
}
它编译时没有任何警告或错误,但在执行过程中我只收到消息Bus error: 10。似乎我初始化和使用 ListNode 变量和指针的方式有问题,任何见解都将不胜感激。
【问题讨论】:
-
你在
List::append中取消引用newnode而没有先分配节点。 -
您应该考虑提高警告级别。此外,在您理解并纠正您的代码后,您应该使用
std::forward_list或仅使用std::vector。 -
谢谢,我刚刚查找了如何分配结构,它起作用了。似乎我最初试图通过另一个线程上的解决方案来解决这个问题,但没有意识到这是关于分配一个类对象而不是一个结构。
-
一个类对象而不是一个结构。在 c++ 中,除了默认可见性之外,这些是相同的。
-
类对象分配看起来像'ListNode newnode = new ListNode()',而结构分配看起来像'ListNode *newnode = new ListNode'。对吗?