Hey Guys,
So I'm working on a bigger project but trying to implement some Linked List functionality into it and I keep getting this segmentation fault at the same spot and I've checked examples and such and my code (I think) is in line with theirs but mine's not working. I'm a little rusty on C and just getting back into it so maybe it's something simple. I thought I had pointers down pat but maybe I don't. If someone see's what's causing this I'd appreciate it!
I'm trying to implement a doubly-linked list:
listtest.c
list.hCode:#include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <unistd.h> #include "list.h" int main(void) { //Vars List *list; Node *head; Node *node; int r; //Setup if((list = (List *)malloc(sizeof(struct List))) == NULL) { printf("List: Memory Allocation Failed...\n"); return 0; } if((head = (Node *)malloc(sizeof(struct Node))) == NULL) { printf("Head: Memory Allocation Failed...\n"); return 0; } head->value = 5; r = init(&list, &head); if(r == -1) { printf("Linked List: init() Failed...\n"); return 0; } //Setup Additional Node if((node = (Node *)malloc(sizeof(struct Node))) == NULL) { printf("Linked List: add() Failed...\n"); return 0; } r = add(&list, &node); if(r == -1) { printf("Linked List: add() Failed...\n"); return 0; } //Print printList(list); //return return 1; }
list.cCode:#ifndef _LIST_H_ #define _LIST_H_ #ifndef _STDDEF_H #include <stddef.h> #endif typedef struct Node { unsigned index; unsigned value; struct Node *next; struct Node *prev; }Node; typedef struct List { unsigned size; struct Node *head; struct Node *tail; }List; int init(List *list, Node *head); int add(List *list, Node *node); void printList(List *list); #endif
The error's occurring in the list.c (above) on line 53, where the add() function is traversing to the end of the list:Code://Includes #include "list.h" //Pre-Processors #ifndef _STDIO_H #include <stdio.h> #endif #ifndef _STDLIB_H #include <stdlib.h> #endif //Function Definitions int init(List *list, Node *head) { if(list == NULL) { return -1; } if(head == NULL) { return -1; } list->head = head; list->size = 1; head->index = 0; head->prev = NULL; head->next = NULL; return 1; } int add(List *list, Node *node) { //Vars Node *temp; //Checks if(list == NULL) { return -1; } if(node == NULL) { return -1; } //Move to the end of the list temp = list->head; while(temp->next != NULL) { temp = temp->next; } //Set the links temp->next = node; node->prev = temp; node->index = list->size; //Increment the size list->size++; //Update the tail nodes list->tail = node; return 1; } void printList(List *list) { Node *temp; temp = list->head; while(temp->next != NULL) { printf("Index: %d\tValue: %d\n", temp->index, temp->value); temp = temp->next; } }
If it matters (but I don't think it does) I'm on 32-bit *nix. The program's just crashing with a Seg Fault and gdb is pointing me to that line.Code:... while(temp->next != NULL) ...
Thanks!



1Likes
LinkBack URL
About LinkBacks



so any changes don't persist - but I suppose that's the point of passing the pointers).