c++ - 访问链表时出现Segmentation fault 11

标签 c++ linked-list segmentation-fault

我确定我搞砸了我的指示,或者可能是最初的 NULL , 但我想不通。

我正在尝试将链表写入文本文件:

write_out(node *ll){
    ofstream out;
    out.open("output.txt");
    if (!out.is_open()) exit(EXIT_FAILURE);

    cout << ll->value;

    //stuff to write out
}

和:

struct node {
    int value;
    node *next;
}

但行cout << ll->value原因Segmentation fault: 11 ,我不明白为什么。

我已经注释掉了我实际写出来的代码,因为这无关紧要,问题显然是我(缺乏)对上述工作原理的理解。

我调用write_out(linkedlist)其中 node* linkedlist指向第一个节点。

这发生在:

read_in(node *ll){
    ifstream data; //opened and checked open as above for out
    int v;
    ll = new node;
    node *tmp = ll;
    data >> tmp->value;
    while(data >> v){
        tmp->next = new node;
        tmp = tmp->next;
        tmp->value = v;
    }
    tmp->next = NULL;  //thanks @sharth
}

肯定还没有离开ll = NULL

最佳答案

read_in(node *ll){

ll 是一个按值传递的参数。这意味着在 read_in 中对它的任何更改都只是本地的,在它之外没有任何影响。因此,在 read_in 完成后,指向列表头部的指针仍然是 NULL(假设这是您用来初始化指针的内容)。因此,使用 NULL 参数调用 write_out 会取消引用 NULL 指针,这将导致您的 SIGSEGV。

关于c++ - 访问链表时出现Segmentation fault 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711537/

相关文章:

c++ - 使用带有 "this"的智能指针

.net - 程序集链接器错误故障排除,C++,VS 2005

c - 对寻找循环列表算法的疑惑

c - c文件操作中的段错误

c++ - 如何使优先级队列使用自定义类中的变量(升序/降序)

c++ - ApplicationVerifier 未检测到句柄泄漏,我该怎么办?

java - 对链接列表进行排序会导致丢失LinkedList中间值,并且仅返回java中排序后的值的第一个和最后一个

c++ - 链表输出崩溃

来自信号处理程序的 sys.exit() 上的 Python 核心转储

C pthread_join() 产生段错误