Hey guys, I'm new to this forum, but I have been programming in C for a little while. In a project that I'm currently doing, I keep getting segfaults, but I can't figure out why. When I run the program in gdb, it tells me the problem is coming from my "additem(...)" method, but I can't see anything wrong there, unless the malloc is incorrect. Anyway, any help would be greatly appreciated. Here's my code:
EDIT: Wow...that looks like a gigantic block of code, sorry about that! but I'm pretty sure the problem lies somewhere in "Addtolist"....Code:#include <stdio.h> #include <stdlib.h> /* Step 1: define your struct here */ struct node { int data1; int data2; int L1; int L2; struct node * next1; struct node * next2; }; typedef struct node *nodePtr; nodePtr head = NULL; nodePtr tail = NULL; nodePtr head2 = NULL; /* Step 2: put code in the functions below to make the list work. */ void clearList () { nodePtr this = NULL; nodePtr next = NULL; if (head != NULL) { this = head; while ((this->next1) != NULL) { next = (this->next1); free(this); this = next; } free(this); } } void addToList (int data1, int data2) { nodePtr newnode = (nodePtr) malloc(sizeof(struct node)); nodePtr iter = head; nodePtr temp = NULL; newnode->data1 = data1; newnode->data2 = data2; newnode->next1 = NULL; newnode->next2 = NULL; newnode->L1 = 0; newnode->L2 = 0; if (!head) { head = newnode; head2 = newnode; } else if (data1 < (head->data1)) { newnode->next1 = head; head = newnode; } else { while((data1 > (iter->data1)) && (iter != NULL)) { temp = iter; iter = (iter->next1); newnode->L1++; } temp->next1 = newnode; newnode->next1 = iter; if (newnode->next1 == NULL) tail = newnode; else { while(iter->next1 != NULL) { iter->L1++; iter = iter->next1; } iter->L1++; } } if(head2) { if (data2 < (head2->data2)) { newnode->next2 = head2; head2 = newnode; } else { iter = head2; while((data2 > (iter->data2)) && (iter != NULL)) { temp = iter; iter = (iter->next2); newnode->L2++; } temp->next2 = newnode; newnode->next2 = iter; if (iter != NULL) { while(iter->next2 != NULL) { iter->L2++; iter = iter->next1; } iter->L2++; } } } } void printFirst () { nodePtr iterator = head; while( (iterator->next1) != NULL) { printf("%d , %d \n", iterator->data1, iterator->data2); iterator = (iterator->next1); } printf("%d , %d \n", iterator->data1, iterator->data2); } void printSecond () { nodePtr iterator2 = head2; while( (iterator2->next2) != NULL) { printf("%d , %d \n", iterator2->data1, iterator2->data2); iterator2 = (iterator2->next2); } printf("%d , %d \n", iterator2->data1, iterator2->data2); } int disparity () { return 0; }



LinkBack URL
About LinkBacks


