内联实现和函数调用在C中显示两种不同的行为?

时间:2015-04-04 08:46:48

标签: c function pointers data-structures linked-list

我一直在努力为delete function实施singly linked list

我的实施如下。

typedef struct singly_linked_list{
    int data;
    struct singly_linked_list *next;
}sll;

删除第一个节点的功能如下:

void delete_node_from_front(sll ** head){
    sll ** temp;
    *temp = *head;
    (*head) = (*head)->next;
    (*temp)->next = NULL;
    free_node(temp);
}

我调用此函数的另一个函数:

void delete_node_from_given_pos(sll ** head, int pos){
    int i = 1;
    sll * temp;
    sll * prev;
    temp = *head;
    prev = *head;
    if(pos == 1){
        delete_node_from_front(head);
    }
    else{
        while(temp != NULL && i < pos){
            i++;
            prev = temp;
            temp = temp->next;
        }
        if(temp != NULL){
            prev->next = temp->next;
            temp->next = NULL;
            free_node(&temp);
        }
        else{
            printf("Node with given position is not present");
        }
    }
}

这个实现给了我segmentation fault

但是,如果我通过以下代码替换delete_node_from_front()的实现中的函数调用delete_node_from_given_pos()

(*head) = (*head)->next;
temp->next = NULL;
free_node(&temp);

计划runs perfectly。我称之为fucntion的方式:

sll * head;
head = NULL;
int arr[_SIZE]=_ELEMENT;
create_list(&head, arr, _SIZE);
delete_node_from_given_pos(&head, 1);
print_list(head);

print_list功能

的实施
void print_list(sll * head){
    int i = 0;
    while(head != NULL){
        printf("%d ", head->data);
        head =  head->next;
    }
    printf("\n");
}

free_node函数的实现:

void free_node(sll ** head){
    free(*head);
}

这种行为的可能原因是什么?

0 个答案:

没有答案