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:
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;
}
EDIT: Wow...that looks like a gigantic block of code, sorry about that! but I'm pretty sure the problem lies somewhere in "Addtolist"....