反向链接列表(seg fault)

时间:2014-03-16 10:44:02

标签: c function struct linked-list segmentation-fault

我的目标是创建一个对List执行反向操作并返回反向List的函数。

Root --> First element in the List, 
size --> Size of the list, 
str -->  Data (string) in the list and 
next --> Points to next node in the List. 

问题是我正在获取分段故障核心转储。

请帮我解决这个问题。

提前感谢

typedef struct {
    element *root;
    int size;
} list;


typedef struct _element {
    char* str;
    struct _element *next;
} element;



list* reverse_list(list *lst) {
    lst = malloc(sizeof(list));

    element *aux1, *aux2, *aux3;
    aux1 = malloc(sizeof(element));
    aux2 = malloc(sizeof(element));
    aux3 = malloc(sizeof(element));

    aux1 = lst->root;
    aux2 = NULL;

    while (aux1->next != NULL) {
        aux3 = aux1->next;
        aux1->next = aux2;
        aux2 = aux1;
        aux1 = aux3;
    }

    lst->root = aux1;

    return lst;
}

1 个答案:

答案 0 :(得分:0)

首先,我建议您了解什么是封装。我知道这是一个示例,但将代码拆分为create_list reverse_list destroy_list是一个很好的做法。

问题在于:

   aux1 = lst->root;
   aux2 = NULL;

松开指向aux1和aux2的指针。这是内存泄漏,使用像gdb这样的调试器很容易跟踪。当while尝试读取aux1时,它会获得一个带有垃圾值的未定义指针

您还需要了解RAII。