执行单链表按序号删除元素操作时,free要删除的节点时报错

bool Deletelist(pLnode &p, int i)
{
pLnode s = getelem(p, i - 1);
if (NULL == s)
{
return false;
}
Lnode* q= s->next;//q是要删除的位置
s->next = q->next;//断链
//q= NULL;
free(q);
q=NULL;
return true;
}

free前要判断p是不是空指针 是的话直接返回

Lnode* q= s->next;//q是要删除的位置 , 应是:pLnode* q= s->next;//q是要删除的位置