template<class T>
class ExtentSink
{
public:
struct ES
{
ES *rlink;
ES *llink;
T extents;
};
ES es;
ES rp;
ES *p; ExtentSink(ES *a=NULL,ES *b=NULL,T c=0){es.rlink=a;es.llink=b;es.extents=c;}
~ExtentSink() { delete rp.rlink; }

void Add(T m,int i)
{
if(i==0)
{
es.extents=m;
es.llink=NULL;
es.rlink=NULL;
rp.llink=&es;
rp.rlink=&es;

}
if(i!=0)
{
p=new ES;
p->llink=rp.llink;
p->extents=m;
p->rlink=NULL;
rp.rlink=p;
rp.llink=p;
}

} T Pre()
{ return rp.llink->extents;
} T Next()
{
rp.llink=rp.llink->rlink;
rp.rlink=rp.rlink->rlink;
return rp.llink->extents;
}};求问哪里错了

解决方案 »

  1.   

    是在View类中调用Pre函数出现了错误,弹出对话框:
    xxxxxx.exe 中的 0x52317678 (mfc100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdd5 时发生访问冲突
    点击中断,监视栏中写着:CXX0025:错误:运算符要求类/结构/联合 
    指向这一段代码:m_lpDispatch = dispatchSrc.m_lpDispatch; 
    COleDispatchDriver::COleDispatchDriver(const COleDispatchDriver& dispatchSrc)
    {
    ASSERT(this != &dispatchSrc);   // constructing from self? m_lpDispatch = dispatchSrc.m_lpDispatch; 
    if (m_lpDispatch != NULL)
    m_lpDispatch->AddRef();
    m_bAutoRelease = TRUE;
    }
      

  2.   

    dispatchSrc 没有实例
      

  3.   

    检查一下 dispatchSrc,
    如果是指针变量,应按照dispatchSrc -> something形式使用。
    如果是对象实例,应按照dispatchSrc.something形式使用。并请注意在传入函数前,dispatchSrc参数应该有正确的赋值。
      

  4.   

    IDE 调试中开启异常捕捉  0xC0000005, 在0xC0000005异常停止时, 结合调用堆栈修改代码解决之
      

  5.   

    dispatchSrc 这个为非法指针,前面没有创建成功