Shouldn't this become NULL and exit the loop? It certainly doesn't...
Code:void DestroySymTab(struct SymTab *ATable) { int i; struct SymEntry *p; for (i = 0; i < ATable->Size; i++) { while(ATable->Contents[i] != NULL) { p = (struct SymEntry*)ATable->Contents[i]; while(p->Next != NULL){ p = p->Next; } free(p); p = NULL; } } free(ATable); };