c++ *指针 即取指针指向内容时遇到的奇怪有关问题

c++ *指针 即取指针指向内容时遇到的奇怪问题
在做A*寻路算法
path是Position2D_ASTAR*型的栈,删除栈顶元素到临时Position2D_ASTAR* temp。我想打印*temp即栈顶指向的东西,然后打印这个东西。
while (!Path.IsEmpty())
{
Position2D_ASTAR* temp;
Path.Delete(temp);
cout<<*temp;
}

cout<<重载Position2D_ASTAR的父类Position2D的友元输出函数为:
ostream& operator<<(ostream& out,Position2D& p)
{
out<<"("<<p.row<<","<<p.col<<")";
return out;
}

把断点设在out<<"("<<p.row<<","<<p.col<<")";
奇怪的事情发生了,p.row,p.col都对,说明*temp的指向应该没错,但出现了错误:0x00000000处有未经处理的异常:0xC00000005:Access violation
停在了这里:
	_OutIt __CLR_OR_THIS_CALL put(_OutIt _Dest,
ios_base& _Iosbase, _Elem _Fill, long _Val) const
{ // put formatted long to _Dest
return (do_put(_Dest, _Iosbase, _Fill, _Val));
}
但是正是运行的时候ctrl+F5就不会出现这个,但在后边有问题,估计也和这个有关,请问大神是怎么回事?
C++ 指针

------解决方案--------------------
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

判断是否越界访问,可以在数组的最后一个元素之后对应的地址处设置数据读写断点。如果该地址对应其它变量干扰判断,可将数组多声明一个元素,并设置数据读写断点在该多出元素对应的地址上。

------解决方案--------------------
应该是cout<<*temp; 有问题了 你可以把这句在之前打印 或者屏蔽掉 会不会Crash

------解决方案--------------------
while (!Path.IsEmpty())
    {
        Position2D_ASTAR* temp=Path.top();假设该栈实现了这个函数
        cout<<*temp;
        Path.Delete(temp);//这个会不会已经释放内存了
        
    }