游戏大厅 中增多玩家的函数为什么会出错

游戏大厅 中增加玩家的函数为什么会出错
#include <iostream>
#include <string>

using namespace std;

class Player
{
public:
Player(const string& name = "") : m_Name(name), m_pNext(0){}
string getName() const { return m_Name; }
Player* getNext() const{ return m_pNext; }
void setNext(Player* next){ m_pNext = next; }
private:
string m_Name;
Player* m_pNext;
};

class Lobby
{
friend ostream& operator<<(ostream& os, const Lobby& aLobby);
public:
Lobby() : m_pHead(0){};
~Lobby() { Clear(); }
void AddPlayer();
void RemovePlayer();
void Clear();
private:
Player* m_pHead;
};

int main()
{

Lobby myLobby;
int choice;

do
{
cout << myLobby;
cout << "\nGame Lobby\n";
cout << "0 - Exit the program.\n";
cout << "1 - Add a player to the lobby.\n";
cout << "2 - Remove a player from the game lobby";
cout << "3 - Clear the lobby.\n";
cout << endl << "Enter choice :";
cin >> choice;
switch (choice)
{
case 0:cout << "Good-bye.\n"; break;
case 1:myLobby.AddPlayer(); break;
case 2:myLobby.RemovePlayer(); break;
case 3:myLobby.Clear(); break;
default:cout << "That was not a valid choice.\n";
}
} while (choice != 0);
return 0;
}
void Lobby::AddPlayer()
{
cout << "Pleas e enter thr name of the new player:";
string name;
cin >> name;
Player* pNewPlayer = new Player(name);

if (m_pHead = 0)
m_pHead = pNewPlayer;
else
{
Player* pIter = m_pHead;
while (pIter->getNext() != 0)
pIter = pIter->getNext();
pIter->setNext(pNewPlayer);
}
}
void Lobby::RemovePlayer()
{
if (m_pHead == 0)
{
cout << "The game lobby is empty.No one to remove!\n";
}
else
{
Player* pTemp = m_pHead;
m_pHead = m_pHead->getNext();
delete pTemp;
}
}

void Lobby::Clear()
{
while (m_pHead != 0)
RemovePlayer();
}
ostream& operator<<(ostream& os, const Lobby& aLobby)
{
Player* pIter = aLobby.m_pHead;

os << "\nHere's who's in the game lobby:\n";
if (pIter == 0)
os << "The lobby is empty.\n";
else
while (pIter != 0)
{
os << pIter->getName() << endl;
pIter = pIter->getNext();
}
return os;
}

按1,再输入一个名字就崩溃了。求解释
------解决方案--------------------
崩溃。。说明你该设断点调试了。可以自己解决的额
------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

------解决方案--------------------

void Lobby::AddPlayer()
{
cout << "Pleas e enter thr name of the new player:";
string name;
cin >> name;
Player* pNewPlayer = new Player(name);

if (m_pHead == 0)
m_pHead = pNewPlayer;
else
{
Player* pIter = m_pHead;
while (pIter->getNext() != 0)
pIter = pIter->getNext();
pIter->setNext(pNewPlayer);
}
}


------解决方案--------------------
<span style="color: #FF0000;">if (m_pHead == 0)</span>
------解决方案--------------------
if (m_pHead == 0)
游戏大厅 中增多玩家的函数为什么会出错