i have a delema with my xor linked list program....now i keep getting the bottom error i will also get segmentation errors throughout the insert function!!!
i have the list commented out at all times....the only thing it will do right now is input numbers!!
and will output the number being passed in...and then what the head is afterwards...
this is the source code revised again:
here is my output:Code:#include <stdio.h> #include <stdlib.h> #include "rndm.h" #define MAX_NUMBERS 100 typedef struct _node{ int data; unsigned long link; } node;//end node node *tmp, *head, *tail, *next, *prv, *cur; void insert(insertNum){ printf("This is the random number passed in %d\n", insertNum); node *nekw = (node *)malloc(sizeof(node)); nekw->data = insertNum; printf("this is the number inputed %d\n", nekw->data ); cur = head; prv = NULL; while(cur != NULL && cur->data < insertNum){ next = (node *)(cur->link ^ (unsigned long)prv); prv = cur; cur = next; }//end while loop if(prv == NULL){ head = nekw; }//end if statement. else{ nekw->link ^= (unsigned long) prv ^(unsigned long) cur; prv->link ^= (unsigned long) cur ^ (unsigned long) nekw; cur->link ^= (unsigned long) prv ^ (unsigned long) nekw; }//end else statement. }//end insert. void delete(int deleteNum){ printf("I am in the delete function!\n"); cur = head; printf("This is in cur before i start %2.1d\n", cur->data); prv = NULL; while(cur != NULL && (cur->data != deleteNum)){ prv =(node *)(cur->link ^ (unsigned long)next); prv = cur; cur = next; }//end while loop if(cur != NULL && (cur->data == deleteNum)){ printf("this is what was found %2.1d\n", cur->data); prv->link ^= (unsigned long) prv ^ (unsigned long) cur; next->link ^= (unsigned long) cur^ (unsigned long) next; free(cur); }//end if statement. }//end delete. void list(int option){ int cnt = 1; if(option == 1){ cur = head; prv = NULL; printf("This is the list in acending order: \n"); while(cnt <= MAX_NUMBERS){ printf("%3.1d", cur->data); cnt++; if(cnt % 10 == 0){ printf("\n"); }//end if statement prv =(node *)(cur->link^(unsigned long)next); prv = cur; cur = next; }//end while loop }//end if else if(option == 2){ cur = tail; next = NULL; printf("This is the list in decending order: \n"); if(cnt % 10 == 0){ printf("\n"); }//end if statement. while (cnt <= MAX_NUMBERS){ printf("%3.1d", prv->data); cnt++; if(cnt % 10 == 0){ printf("\n"); }//end if statement. prv = (node *)(cur->link^(unsigned long) prv); next = cur; cur = prv; }//end while loop. }//end else if }//end list. int main(){ head = NULL; tail = head; long inputZ; int num, option,cnt, beginning, end; int numDelete; printf("Please enter the seed: "); scanf("%l\n", &inputZ); init_seed(inputZ); printf("Please enter the range: "); scanf("%d%d\n", &beginning, &end); set_range(beginning, end); for(cnt=0; cnt <= MAX_NUMBERS; cnt++){ insert(rndm()); }//end for loop. #if 0 printf("For ascending press 1, or 2 for decending: "); scanf("%d\n", &num); list(num); numDelete = 7004; delete(numDelete); printf("For ascending press 1, or 2 for decending: "); scanf("%d\n", &num); list(num); #endif return 0; }//end main.
i don't understand what is going wrong....the only time the input should really brake down is the first one inserted and if a number inputed into a list of nodes is less than the first node then i have a problem....otherwise i should just be inserting nodes that have different numbers that are less than the next one!! but it seems to break down before i even insert a number!!!Code:> gcc linkList.c rndm.o >ls a.out* lab1/ lab2/ linkList.c rndm.h rndm.o > a.out Please enter the seed: 12345 Please enter the range: 1 9999 This is the random number passed in 3995 this is the number inputed 3995 This is the random number passed in 10463 this is the number inputed 10463 Segmentation fault >


