gpt4 book ai didi

c++ - 段错误(C++ 指针)

转载 作者:行者123 更新时间:2023-11-28 04:03:36 25 4
gpt4 key购买 nike

我正在尝试使用节点类和指向下一个节点的指针在 C++ 中实现链表类。

template<class T>
class Node {
public: T val;
public: Node* next;
public: Node() { }
public: Node(T val) { this.val = val; }
};

我创建了一个链表类,它有一个指向头部的指针和一个函数 append 以将节点添加到列表中:

template<class T>
class LinkedList {
private: Node<T>* head;

public: LinkedList() { }
public: LinkedList(T val) { head -> val = val; }

public: void append(T val) {
Node<T>* temp = head;
while(temp -> val != NULL) {
temp = temp -> next;
}
temp -> val = val;
}
};

但是编译运行后,报错“Segmentation fault (core dumped)”

我知道一些关于段错误的知识,比如试图访问一个不再存在的内存位置,但我在这个例子中没有得到它,有什么帮助吗?

最佳答案

主要问题是你没有用空指针初始化下一个指针,而是默认它是空指针。修复方法如下:

template <class T>
class Node {
public:
T val;
Node* next;
Node( T val_ = {} )
: val{ val_ }
, next{ nullptr }
{ }
};

除此之外,append 也有问题。代码应该是这样的:

template <class T>
class Node {
public:
T val;
Node* next;
Node(T val_ = {}) : val{ val_ }, next{ nullptr } {}
};

template <class T>
class LinkedList {
private:
Node<T>* head;

public:
LinkedList(T val_ = {}) : head{ new Node{val_} } {}

void append(T val) {
Node<T>* temp = head;
while (temp->next != nullptr) {
temp = temp->next;
}
temp->next = new Node<T>{ val };
}
};

int main() {
LinkedList<int> l;
l.append(10);
}

其他评论:

  • this.val 不会编译,因为 this 是一个指针。你的意思是 this->val
  • 您应该考虑使用成员(member) initializer lists而不是 this->val = val
  • 初始化所有构造函数中的所有成员。

关于c++ - 段错误(C++ 指针),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59124227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com