【发布时间】:2020-04-11 20:54:42
【问题描述】:
我的一个作业的一部分要求我递归搜索列表以查看其中是否包含双精度数。它打印一个关于它是否在列表中的字符串,但是在它完成循环后它崩溃并说存在分段错误。以下是使用递归方法的代码的隔离部分。
class Header
{
protected:
//Create the struct for the list
struct ListNode {
double x;
ListNode *next;
ListNode(double v1, ListNode *n1 = nullptr) {
double x = v1;
next = n1;}
};
ListNode *head;
public:
Header()
{head = nullptr;}
//Add doubles to the list
void add(double var) {
if(head == nullptr)
{head = new ListNode(var);}
else {
ListNode *nodePtr = head;
while(nodePtr->next != nullptr)
{nodePtr = nodePtr->next;}
nodePtr->next = new ListNode(var);
}
}
//Call the function that performs the recursive function
void recursiveMember(double var) const
{recursiveMember(head, var);}
private:
//This is where the issue is
void recursiveMember(ListNode *aList, double var) {
if(aList == nullptr)
{cout << var << " is not in the list" << endl;}
if(var != aList->x)
{recursiveMember(aList->next, var);}
else
{cout << var << " is in the list" << endl;}
}
};
int main()
{
//Create the object
Header vars;
//Populate the object
vars.add(1.1);
vars.add(2.2);
vars.add(3.3);
//Call the recursive function
vars.recursiveMember(1.1);
vars.recursiveMember(.5);
return 0;
}
程序显示
1.1 is in the list
.5 is not in the list
Segmentation fault (core dumped)
这不一定是个问题,但是我需要在之后执行一些其他功能,并且段错误会导致程序在执行之前崩溃。
我使用gdb 调试器来隔离导致错误的代码,即
if(var != aList->x) 实现递归功能。
我缺少关于递归的东西吗?
【问题讨论】:
-
double x = v1初始化一个名为x的局部变量。也名为x的数据成员保持未初始化状态。您的所有列表节点都包含垃圾值。
标签: c++ recursion linked-list