Hi,

I have a problem with my list insertion sort function... - wrote it with some help from a book.

The output seems to always be a 'SEG FAULT' and if i'm not wrong, i traced the problem to the sorting part ( 'for' loops).

My test string was "GAAGAA".

Code:typedef struct node node_t; struct node { int start; int end; /*indices of substring*/ int freq; node_t *next; }; node_t *makelist(TNode *tree, char *s){ char *substring(char *,int, int); node_t heada, headb; int i, j; node_t *t, *u, *x, *a = &heada, *b; for(i=0, t=a; i<strlen(s); i++) { for(j=i; j<strlen(s); j++){ t->next = malloc(sizeof(*t)); t = t->next; t->next = NULL; t->start = i; t->end = j; t->freq = 0; } } /*Problem lies hence forth*/ b = &headb; b->next = NULL; for(t = a->next; t!=NULL; t=u){ u = t->next; for(x = b; x->next != NULL; x = x->next) if(substrcmp(s, x->next->start, x->next->end, t->start, t->end) == 1) break; t->next = x->next; x->next = t; } return b; } void printlist(node_t *ptr) { while(ptr != NULL) { printf("%d %d %d\n", ptr->start, ptr->end, ptr->freq); printf("\n"); ptr=ptr->next; } } int substrcmp(char *s, int s1, int e1, int s2, int e2) { char c = s[s1]; char d = s[s2]; int x = s1 - e1; int y = s2 - e2; if(c>d || x>y) return 1; else return 0; }