--- search.c 2006-11-29 16:02:21.000000000 -0500 +++ search.c 2009-11-11 17:39:41.000000000 -0500 @@ -229,11 +229,11 @@ /* Get offset of first entry. Then eliminate duplicates and get offsets of unique strings. */ - if (strings[0][0] != NULL) + if (strings[0][0] != '\0') offsets[0] = index_lookup(strings[0], dbase); for (i = 1; i < MAX_FORMS; i++) - if ((strings[i][0]) != NULL && (strcmp(strings[0], strings[i]))) + if ((strings[i][0]) != '\0' && (strcmp(strings[0], strings[i]))) offsets[i] = index_lookup(strings[i], dbase); } @@ -492,9 +492,11 @@ while(cursyn) { if (cursyn->nextform) free_syns(cursyn->nextform); + cursyn->nextform = NULL; nextsyn = cursyn->nextss; free_synset(cursyn); cursyn = nextsyn; + nextsyn = NULL; } } } @@ -504,32 +506,64 @@ void free_synset(SynsetPtr synptr) { int i; - - free(synptr->pos); + + if (synptr->pos) + free(synptr->pos); + synptr->pos = NULL; for (i = 0; i < synptr->wcount; i++){ - free(synptr->words[i]); + if (!synptr->words) + break; + if (synptr->words[i]) { + free(synptr->words[i]); + synptr->words[i] = NULL; + } } - free(synptr->words); - free(synptr->wnsns); - free(synptr->lexid); + if (synptr->words) + free(synptr->words); + synptr->words = NULL; + if (synptr->wnsns) + free(synptr->wnsns); + synptr->wnsns = NULL; + if (synptr->lexid) + free(synptr->lexid); + synptr->lexid = NULL; if (synptr->ptrcount) { - free(synptr->ptrtyp); - free(synptr->ptroff); - free(synptr->ppos); - free(synptr->pto); - free(synptr->pfrm); + if (synptr->ptrtyp) + free(synptr->ptrtyp); + synptr->ptrtyp = NULL; + if (synptr->ptroff) + free(synptr->ptroff); + synptr->ptroff = NULL; + if (synptr->ppos) + free(synptr->ppos); + synptr->ppos = NULL; + if (synptr->pto) + free(synptr->pto); + synptr->pto = NULL; + if (synptr->pfrm) + free(synptr->pfrm); + synptr->pfrm = NULL; } if (synptr->fcount) { - free(synptr->frmid); - free(synptr->frmto); + if (synptr->frmid) + free(synptr->frmid); + synptr->frmid = NULL; + if (synptr->frmto) + free(synptr->frmto); + synptr->frmto = NULL; } if (synptr->defn) free(synptr->defn); + synptr->defn = NULL; if (synptr->headword) free(synptr->headword); + synptr->headword = NULL; if (synptr->ptrlist) free_syns(synptr->ptrlist); /* changed from free_synset() */ - free(synptr); + synptr->ptrlist = NULL; + synptr->nextss = NULL; + free(synptr); + synptr = NULL; } /* Free an index structure */ @@ -1658,7 +1692,8 @@ if (ptrtyp == COORDS) { /* clean up by removing hypernym */ lastsyn = synlist->ptrlist; synlist->ptrlist = lastsyn->ptrlist; - free_synset(lastsyn); + lastsyn->ptrlist = NULL; + free_syns(lastsyn); } } wnresults.searchds = synlist;