实现单链表时,C++中的总线错误:10
Bus error: 10 in C++ while implementing singly linked list
我正试图在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变量和指针的方式似乎有问题,任何见解都将不胜感激。
在行中:
ListNode *newnode;
你创建了指向ListNode
的指针的未初始化变量,然后取消引用它。任何对未初始化变量的访问都会导致UB,但有了指针,你很可能会立即出现总线错误。所以分配内存:
ListNode *newnode = new ListNode;
注意:不是初始化数据成员:
newnode->key_value = key;
newnode->next = NULL;
您应该为ListNode
:提供适当的构造函数
struct ListNode {
int key_value;
ListNode *next;
ListNode( int v ) :
key_value( v ),
next( nullptr )
{
}
};
然后创建它:
ListNode *newnode = new ListNode( key );
并且可以省略接下来的2行。这将使您的代码更加干净,并防止使用未初始化的数据创建ListNode
实例。
注意N2:由于类List
有一个原始指针和数据所有权,所以应该遵循三条规则,创建或禁用copy-ctor、赋值运算符和dtor。
相关文章:
- 总线错误,堆上分配的内存
- 总线错误 10 - 字符 * 数组
- C/C++ 字符串错误与 ARM SEG 故障总线错误
- 获取总线错误:10 并附加字符串
- 多维矢量总线错误
- 链表的总线错误(核心转储)
- C 结构中的总线错误
- 如何解决此总线错误
- 调用虚拟方法导致总线错误
- 尝试打印数组时出现总线错误和奇怪的输出
- 尝试在共享内存中写入时发生总线错误
- C++ 总线错误:尝试解析和更新字符串时出现 10
- 我在以下代码中收到总线错误
- 总线错误:10 还有更多索引要去
- 使用链表的动态队列//总线错误:10(C++)
- 快速修复程序给出的总线错误
- 总线错误10或分段错误11
- C++ 在类成员"无符号长"上使用"^="和"<<"时出现总线错误
- 析构函数中的模拟总线错误
- 试图获取vector迭代器的值时出现总线错误10