该程序应该生成用户输入的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;
}
答案 0 :(得分:3)
您正在尝试访问未初始化的指针。您为print_linked_list
函数提供未初始化的head_ptr
变量。然后,在创建第一个节点时,它将该值用作指向下一个节点的指针。这意味着永远不会满足条件print_ptr != NULL
。
可以通过在head_ptr
中声明NULL
时将main
设置为NULL
来解决此问题。
答案 1 :(得分:3)
head_ptr未初始化为link_field
。
因此,创建的第一个节点将获得其RowRule
的垃圾指针。
因此,当您的打印代码试图遍历链接列表时,它最终会点击垃圾指针,然后跳进“永不落地”。