创建队列类Queue实现入队和出队的c++程序的内存异常

创建队列类Queue实现入队和出队的c++程序的内存错误
这是一个设计结构体list,从而创建队列类Queue实现入队和出队的c++程序,输出结果是1 2 3 4 
可是我在输出1 2 3 4之后 显示
创建队列类Queue实现入队和出队的c++程序的内存异常
调试显示的内存错误位置也让我感觉莫名其妙,求指点


//设计结构体list,从而创建队列类Queue实现入队和出队
#include <iostream>
using namespace std;

struct list
{
int data;
list *next;
};

class Queue
{
public:
Queue()
{
ptrf = ptrb = NULL; //头指针和尾指针
}
// ~Queue(){}
int EnQueue( int x);
int DeQueue();
private:
list * ptrf;
list * ptrb;
};

int Queue::EnQueue( int x)
{
list * newnode = new list;
newnode->data = x;
newnode->next = NULL;

if(ptrb == NULL)
{
ptrf = ptrb = newnode; //队列为空时,队尾都指向新节点
}
else
{
ptrb ->next = newnode; //队列非空时,队尾+1存储新节点
ptrb = newnode;
}
return 0;
}
int Queue::DeQueue()
{
cout << "出队数组为:" << endl;
while(ptrf != ptrb->next)
{
list * tmp; //tmp只是用来在ptrf移位时标记原来的ptrf,从而删除ptrf
tmp = ptrf;
cout << ptrf->data << endl;
ptrf = ptrf->next;
delete tmp;
}
return 0;
}

int main()
{
int string[] = {1,2,3,4};
Queue A;
for(int i = 0;i <4;i++)
{
A.EnQueue(string[i]);
}
A.DeQueue();
return 0;
}


------解决方案--------------------
把 while(ptrf != ptrb->next) 改成 while(ptrf != NULL) ,运行就可以