void free_linkage(Linkage linkage) { size_t j; exfree((void *) linkage->word, sizeof(const char *) * linkage->num_words); exfree(linkage->chosen_disjuncts, linkage->num_words * sizeof(Disjunct *)); free(linkage->link_array); /* Q: Why isn't this in a string set ?? A: Because there is no * string-set handy when we compute this. */ if (linkage->disjunct_list_str) { for (j=0; j<linkage->num_words; j++) { if (linkage->disjunct_list_str[j]) free(linkage->disjunct_list_str[j]); } free(linkage->disjunct_list_str); } #ifdef USE_CORPUS lg_sense_delete(linkage); #endif linkage_free_pp_info(linkage); /* XXX FIXME */ free(linkage->wg_path); free(linkage->wg_path_display); }
static void free_linkages(Sentence sent) { size_t in; Linkage lkgs = sent->lnkages; if (!lkgs) return; for (in=0; in<sent->num_linkages_alloced; in++) { size_t j; Linkage linkage = &lkgs[in]; exfree((void *) linkage->word, sizeof(const char *) * linkage->num_words); exfree(linkage->chosen_disjuncts, linkage->num_words * sizeof(Disjunct *)); free(linkage->link_array); /* Q: Why isn't this in a string set ?? A: Because there is no * string-set handy when we compute this. */ if (linkage->disjunct_list_str) { for (j=0; j<linkage->num_words; j++) { if (linkage->disjunct_list_str[j]) free(linkage->disjunct_list_str[j]); } free(linkage->disjunct_list_str); } #ifdef USE_CORPUS lg_sense_delete(linkage); #endif /* Note: linkage->hpsg_pp_data.domain_array originally got * allocated in sent->constituent_pp->pp_data. */ post_process_free_domain_array(&linkage->hpsg_pp_data); free(linkage->hpsg_pp_data.domain_array); linkage_free_pp_info(linkage); /* XXX FIXME */ free(linkage->wg_path); free(linkage->wg_path_display); } exfree(lkgs, sent->num_linkages_alloced * sizeof(struct Linkage_s)); sent->num_linkages_alloced = 0; sent->num_linkages_found = 0; sent->num_linkages_post_processed = 0; sent->num_valid_linkages = 0; sent->lnkages = NULL; }