将chars添加到列表时出现堆栈溢出错误

时间:2017-01-25 19:16:45

标签: c++ pointers linked-list

我有一个列表和一个向它添加元素的递归函数。我认为那部分是好的。

typedef struct list
{
    char c;
    struct list *next;
} Element;
typedef Element *List;

List myList = NULL;

void add(List &list, char c)
{
    if (list == NULL)
    {
        list = new Element;
        list->next = NULL;
        list->c = c;
    }
    else add(list->next, c);
}

但是在尝试将文件(或者更确切地说是所有字符)放入我的列表时出现堆栈溢出错误。

string line; //keeps strings coming from getline()
while (getline(input, line))
{
    for (int i = 0; i < line.length(); i++)
        add(myList, line[i]);
    add(myList, '\n’);
}

(输入为ifstream类型)

我正在尝试编程的是代码格式化程序(我在大学编程课程的项目,我们都必须使用链接列表)。

1 个答案:

答案 0 :(得分:0)

递归add(list, c)应为add(list->next, c)

您可以通过保留指向最后一个元素的指针来缓解此问题:List tail。你可以通过从函数中返回来维护它:

List add(List& list, const char c) {
    if (list == NULL) {
        list = new Element;
        list->next = NULL;
        list->c = c;
        return list;
    } else {
        return add(list->next, c);
    }
}

此功能必须准备好。第一个调用应该如下所示:tail = add(myList, c)如果你这样做,所有后续调用只需要一个堆栈帧:tail = add(tail, c)

Live Example