suanfa1.exe 中的 0x773715de 处有未经处理的错误: 0xC0000005: 读取位置 0x00000000 时发生访问冲突

suanfa1.exe 中的 0x773715de 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
#include <iostream>
using namespace std;
#define M 3
#define N 5
class Node
{
friend class LinkedList;
public:
int datai;
int dataj;
double T;
double t;
bool x;
bool y;
Node *next;
Node(int i,int j)
{
datai=i;
dataj=j;

next=NULL;
}
};
class LinkedList
{
public:
Node *head;
Node *tail;
public:
LinkedList();
void addNode(int valuei,int valuej);
void print();
void insert(int newvaluei,int newvaluej);
void delNode(int valuei,int valuej);
};
LinkedList::LinkedList()
{
head=tail=NULL;
}
void LinkedList::addNode(int i,int j)
{
Node *newNode;
newNode=new Node(i,j);
if(head==NULL)
{
head=newNode;
tail=newNode;
}
else
{
tail->next=newNode;
tail=newNode;
}
}
void LinkedList::delNode(int valuei,int valuej)
{
Node *p=head,*q=p->next;
while(p!=NULL)
{
if(q->datai!=valuei||q->dataj!=valuej)
{
p=q;
q=q->next;
}
else
break;
}
if(p!=NULL)
{
p->next=q->next;
delete q;
}
}
void LinkedList::print()
{
Node *temp=head;
while(temp!=NULL)
{
std::cout<<temp->datai<<temp->dataj<<',';
temp=temp->next;
}
}
void main()
{
LinkedList *WP=new LinkedList();
LinkedList *YP=new LinkedList();
int YPlastk,YPlastj;
for(int j=1;j<=4;j++)
for(int k=0;k<4;k++)
{
WP->addNode(k,j);

}
while(WP->head!=NULL)
{
if(YP->head==NULL)
{
WP->delNode(0,1);
YP->addNode(0,1);
}
}
WP->print();
std::cout<<std::endl;
YP->print();
std::cout<<std::endl;
}
红色的一段有问题,只知道是内存问题,但是我不知道怎么回事

------解决方案--------------------
1. delNode 你只判断了 p != NULL, 没有判断 q 是否为 NULL。 当 q 为 NULL 时就空指针引用了。
2. 红色那段 while, 里面有改变循环条件吗? 死循环吧
------解决方案--------------------
while(WP->head!=NULL)循环的时候,没有看到WP在变化,就类似于for(i=0;i<n;/*i++*/)中没有i++一样,会是个死循环,应该有类似WP=WP->next之类的语句才行。
------解决方案--------------------
单步调试,看看变量的值