C++特别简单的一个小程序,但是析构函数好像出了问题

#include
using namespace std;

typedef struct LNode
{
int data;
LNode *next;
}LNode,*Linklist;

void Init_L(Linklist &L)//链表初始化
{
L=(Linklist)malloc(sizeof(LNode));
if(!L)
exit(OVERFLOW);
L->next=NULL;
}

class set
{
public:
Linklist L;
void Add(int x);
set();
~set();
};

set::~set()
{
Linklist p=L->next,q;
while (p->next!=NULL)
{
q=p;
p=p->next;
free(q);
}
free(L);
}

set::set()
{
Init_L(L);
}

void Show(set a)//显示
{
cout<<"外函数被执行?"< Linklist p=a.L;
while (p->next!=NULL)
{
cout<next->data< p=p->next;
}
}

void set::Add(int x)
{
Linklist p=L,q;
while (p->next!=NULL)
{
p=p->next;
}
Init_L(q);
q->data=x;
q->next=p->next;
p->next=q;
}

int _tmain(int argc, _TCHAR* argv[])
{
set myset;
myset.Add(1);
myset.Add(2);
myset.Add(3);
myset.Add(4);
myset.Add(5);
myset.Add(6);
Show(myset);
return 0;
}
调试时析构函数那里好像循环多做了一次,不知道为什么

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^