I'm trying to implement a circular doubly linked list in C. Inserting one element was fine, but when inserting the second element, curr
had the same address as prev
.
struct ListNode {
void *item;
struct ListNode *next;
struct ListNode *prev;
};
struct List {
int num_members;
ListNode head;
/* function pointers */
...
};
int ListAppend(List* list, void* item){
ListNode* node = &(list->head);
ListInsertBefore(list,item,node);
return 0;
}
int ListInsertBefore(List* list, void* item, ListNode* node){
ListNode* prev = node->prev;
ListNode curr;
curr.item = item;
node->prev = &curr;
curr.next = node;
prev->next = &curr;
curr.prev = prev;
list->num_members += 1;
return 0;
}
Output of GDB:
62 curr.item = item;
7: node = (ListNode *) 0xbfffef08
8: *node = {item = 0x0, next = 0xbfffee70, prev = 0xbfffee70}
9: &curr = (ListNode *) 0xbfffee70
10: curr = {item = 0x0, next = 0xbfffef08, prev = 0xbfffef08}
11: prev = (ListNode *) 0xbfffee70
12: *prev = {item = 0x0, next = 0xbfffef08, prev = 0xbfffef08}