I am implementing a set covering application which uses cover function

int cover(set *skill_list,set *player_list,set *covering)
Suppose skill_set={a,b,c,d,e}, player_list={s1,s2,s3} then output coverin ={s1,s3} where say s1={a,b,c}, s3={d,e} and s2={b,d}.

Now when I am calling this function it's hanging at run (set_cover.exe stopped working).

Here is my cover function:

typedef struct Spst_{
void *key;
set *st;
}Spst;

int cover(set *skill_list,set *player_list,set *covering)
{
Liste *member,*max_member;
Spst *subset;
set *intersection;
void **data;
int max_size;

set_init(covering); //to initialize set covering initially

while(skill_list->size>0&&player_list->size>0)
{
max_size=0;
for(member=player_list->head;member!=NULL;member=member->next)
{
if(set_intersection(intersection,((Spst *)(member->data))->st,skill_list)!=0)
return -1;

if(intersection->size>max_size)
{
max_member=member;
max_size=intersection->size;
}

set_destroy(intersection); //at the end of iteration
}

if(max_size==0) //to check for no covering
return -1;

subset=(Spst *)max_member->data; //to insert max subset from play list to covering set
set_inselem(covering,subset);

for(member=(((Spst *)max_member->data)->st->head);member!=NULL;member=member->next) //to rem elem from skill list
{
data=(void **)member->data;
set_remelem(skill_list,data);
}

set_remelem(player_list,(void **)subset); //to rem subset from set of subsets play list
}

if(skill_list->size>0)
return -1;

return 0;
}


Now assuming I have defined three set type sets(as stated above) and calling from main as

cover(skills,subsets,covering);=> runtime hang Here
Please give inputs on the missing link in this or the prerequisites for a proper call to this function type required.

Assume other functions used in cover are tested and working fine.