我在链接列表中不断出现分段错误
I keep getting segmentation fault on link list
该程序本应制作用户输入的n
数字的随机链表,但当它试图打印链表时,会出现分段错误。
程序一直工作到必须显示链接列表为止。
#include <iostream>
class node
{
public:
// TYPEDEF
typedef double value_type;
// CONSTRUCTOR
node(
const value_type& init_data = value_type(),
node* init_link = NULL
)
{ data_field = init_data; link_field = init_link; }
// Member functions to set the data and link fields:
void set_data(const value_type& new_data) { data_field = new_data; }
void set_link(node* new_link) { link_field = new_link; }
// Constant member function to retrieve the data:
value_type data() const { return data_field; }
// Constant member functions to retreive the link:
node* linker() const { return link_field; }
private:
value_type data_field;
node* link_field;
};
int myrand(int)
{
return(1 + rand() %(1000 - 1 +1));
}
void print_linked_list(node*& head_ptr, node*& print_ptr, size_t n)
{
for (size_t i =1 ; i <= n ; i++) {
head_ptr = new node(myrand(n), head_ptr);
}
std::cout << "Unsorted List: " << std::endl;
for (print_ptr = head_ptr; print_ptr !=NULL; print_ptr = print_ptr->linker()) {
std::cout << print_ptr->data() << " ";
}
}
int main()
{
size_t n;
srand(time(NULL));
node* head_ptr;
node* print_ptr;
std::cout << "Please input a number" << std::endl;
std::cin >> n;
print_linked_list(head_ptr, print_ptr, n);
return 0;
}
您正试图访问一个未初始化的指针。您为print_linked_list
函数提供了未初始化的head_ptr
变量。然后,在创建第一个节点时,它使用该值作为指向下一个节点的指针。这意味着条件print_ptr != NULL
永远不会被满足。
当您在main
中声明head_ptr
时,可以通过将其设置为NULL
来修复此问题。
head_ptr未初始化为NULL
。
因此,创建的第一个节点将获得其link_field
的垃圾指针。
因此,当您的打印代码试图遍历链接列表时,它最终会碰到垃圾指针,并进入"永不着陆"。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?