调试时会自动引发中断

求解约瑟夫环的写循环链表到第三次delete cur时会出错
#include
using namespace std;

struct Josephus
{
int i;
Josephus *next;
};
Josephus head = { 1,0 };
Josephus * add()
{
Josephus *p = new Josephus();
if (p != NULL)
{
cout << "successfully apply node" << endl;
return p;
}
else return 0;

}

void add2(Josephus *a)
{

Josephus*p = &head;
while (p->next)
{
    p = p->next;
}
c->next = a;
a->next = NULL;

}
int main()
{
Josephus *p;
int n, m;
int count = 2;
cin >> n >> m;
for (int i = 2; i < n+1; i++)
{
p = add();
add2(p);
p->i = i;
}
p->next = &head;
Josephus *cur = head.next;
Josephus *pre = &head;
while (pre!=NULL)
{
count++;
pre = cur;
cur = cur->next;
if (count == m)
{
pre->next = cur->next;
cout << cur->i;
delete cur;
cur = pre->next;
count = 1;
}

}
return 0;

}

参考:http://blog.csdn.net/jzh1988903/article/details/39854199