c ++ связанный список отладки segfault

0

Я выполнял segfault во время реализации моего собственного связанного_источника в C++. Я потратил несколько часов на это, но до сих пор не могу понять ошибку. Любая помощь будет оценена. Заранее спасибо.

Я думаю, что ошибка в функции find_kth1(), но я не знаю, что я делаю неправильно. Я могу напечатать связанный список так, как ожидалось.

/* 
 *
 * find kth to last element in a singly linked list
 */

#include <iostream>
// #include "../linked_list.h"
using namespace std; 

struct Node {
    int data ; 
    struct Node *next;
}; 

Node* push(Node *head, int d){ 
    // push to top
    Node *n = new Node; 
    n->data = d; 
    n->next = head;
    return n;
}


void print_LL( Node* head){ 
    Node* p = head;
    while(p) { 
        cout << p->data << ' '; 
        p = p->next; 
    }
} 

int find_length( Node* head) { 
    int len = 0; 
    Node* p = head; 
    while(p){
        len ++; 
        p = p->next;
    }
    return len;
}

Node* find_kth1( Node* head, int k){ 
    // find length, scan twice
    int len  = find_length(head);

    Node *p = head; 
    int i = 0;
    while( i < len-k){
        i ++ ;
        p = p->next;
    }
    return p;
}



int main( void){ 
    Node *head; 
    head = push( head, 2) ; 
    head = push( head, 3) ; 
    head = push( head, 4) ; 
    head = push( head, 5) ; 
    head = push( head, 2) ; 

    print_LL( head); 


    int k = 3;

    Node *p = find_kth1( head, k);

    // cout<<p->data<<endl;
} 
  • 1
    Запустите в отладчике или добавьте какой-нибудь вывод, чтобы увидеть, как далеко он продвинется. Я бы начал с Node *head = 0; - Я думаю, что C ++ все равно это сделает, но я не хочу видеть, что это даже выглядит неинициализированным ...
  • 1
    Node *head = NULL; было бы хорошим местом для начала. и @John3136 John3136, никакой C ++ не делает этого для вас с автоматическими простыми типами данных.
Показать ещё 1 комментарий
Теги:
linked-list

1 ответ

4
Лучший ответ

Указатель на голове должен быть инициализирован

Он используется без инициализации

Обычно компилятор дает предупреждение, поэтому всегда прислушивайтесь к предупреждениям

Node *head=NULL;
  • 0
    да, мне нужно добавить опцию -Wall Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню