m_ptArray[0].x= m_scSmallCube[i][j][k].m_ptPoint[1].x;
m_ptArray[1].x= m_scSmallCube[i][j][k].m_ptPoint[3].x;
m_ptArray[2].x= m_scSmallCube[i][j][k].m_ptPoint[7].x;
m_ptArray[3].x= m_scSmallCube[i][j][k].m_ptPoint[5].x;
m_ptArray[0].y= m_scSmallCube[i][j][k].m_ptPoint[1].y;
m_ptArray[1].y= m_scSmallCube[i][j][k].m_ptPoint[3].y;
m_ptArray[2].y= m_scSmallCube[i][j][k].m_ptPoint[7].y;
m_ptArray[3].y= m_scSmallCube[i][j][k].m_ptPoint[5].y;
m_scSmallCube[i][j][k].m_sfFace[0].m_rFace.CreatePolygonRgn(m_ptArray,3,ALTERNATE);
代码中,m_ptArray数组是POINT结构体数组,m_rFace成员是CRgn类对象,m_scSmallCube[i][j][k].m_sfFace[0].m_rFace.CreatePolygonRgn(m_ptArray,3,ALTERNATE);
这句导致Debug Assertion Failed!异常,提示..\mfc\wingdi.cpp Line:1157
找到该文件 相关内容如下:(黑体部分为1157行)
BOOL CGdiObject::Attach(HGDIOBJ hObject)
{
ASSERT(m_hObject == NULL);      // only attach once, detach on destroy
        if (hObject == NULL)
{
return FALSE;
}
// remember early to avoid leak
m_hObject = hObject;
CHandleMap* pMap = afxMapHGDIOBJ(TRUE); // create map if not exist
ASSERT(pMap != NULL);
pMap->SetPermanent(m_hObject, this);
return TRUE;
}
请问各位,为什么会出现这个异常?
在release下就不会出现异常,请问怎么回事?为什么debug就不行?如果用release,忽略此异常,是否影响程序运行?谢谢各位,急拜托!!!

解决方案 »

  1.   

    感觉之前m_rFace已经Create过了。
      

  2.   

    没啊,只调用过构造函数,初始化函数这是第一次调用。还有,请问这个CreatePolygonRgn()不可以重复调用吗?(我这里是第一次调用)那我做魔方,魔方一转咋办?郁闷我本打算每次魔方旋转后都更新这个m_rFace呢
      

  3.   

    你是在哪里调用的?跟踪一下,估计是多次调用造成的。
    crgn我没用过,看了下msdn,觉得你可以用copyrgn:
    CRgn rgn;  //局部变量
    rgn.CreatePolygonRgn(point, 2, ALTERNATE);
            m_rFace.CopyRgn(&rgn);
      

  4.   

    用了copyrgn就没有异常了!!!这是怎么回事啊?请问?您怎么想到的?给俺说下思路呗:)谢谢!
      

  5.   

    ASSERT(m_hObject == NULL);      // only attach once, detach on destroy 
    这个说明程序要求m_hObject是NULL而它不是,那么就一定是已经创建过了。
    有些函数在程序启动时要执行好几次,所以会有这种情况。
    其实只要跟踪一下就清楚了。
      

  6.   

    哦。。那为什么release下就能通过呢?又一个问题
    谢谢,呵呵,分给你!
      

  7.   

    断言ASSERT只是在Debug时起作用。