1、我在头文件中定义一个int *变量 
int  *m_pQPos; 
2、然后在构造函数中给它赋值 
CMeasureDlg::CMeasureDlg(CWnd* pParent /*=NULL*/) 

  m_pQPos = NULL; 

3、我自定义了一个初始化函数, 
void CMeasureDlg::InitialNewQST() 

if(m_pQPos!=NULL) 

delete[] m_pQPos; 
m_pQPos=NULL; 

m_pQPos = new int[1000]; 

4、void CMeasureDlg::OnDestroy() 

if(m_pQPos!=NULL) 
delete[] m_pQPos; 
CDialogBar::OnDestroy(); 

5、使用m_pQPos 之前,我都调用InitialNewQST()函数,但是我发现第一次调用时没有问题,因为m_pQPos还没有给赋值,但是第二次调用时,m_pQPos已经保存了一些数据,这时调用InitialNewQST()函数,出错,请高手指点! 

解决方案 »

  1.   

    先看InitialNewQST 出错时是什么出错了? 跟踪一下
      

  2.   

    m_pQPos应该是类的成员变量吧。
    另外还有一个地方要改:void CMeasureDlg::OnDestroy() 

      if(m_pQPos!=NULL) 
        delete[] m_pQPos; 
      m_pQPos = NULL; // <--------- 加上这一句
      CDialogBar::OnDestroy(); 

      

  3.   

    调试程序,监视m_pQPos这个指针值从new之后到delete之前是否有变化;如果指针值没有变化,再开个内存窗口,监视m_pQPos-0x20 ~ m_pQPos这段内存是否有变化。估计是其它地方内存越界破坏了m_pQPos或破坏了为其分配的内存。
      

  4.   

    你的new的地址还是你DELETE是的地址吗,跟踪m_pQPos的值
      

  5.   

    跟踪调试,watch 这个值 m_pQPos
      

  6.   

    可能是你在使用 m_pQPos 是超出了 1000 的范围,比如你写了这样的代码:
    m_pQPos[1000]=44;
      

  7.   


    void CMeasureDlg::InitialNewQST() 

    if(m_pQPos!=NULL) 

    delete []m_pQPos; //改了一下
    m_pQPos=NULL; 

    m_pQPos = new int[1000]; 
    } 代码应该没有问题,肯定是对其操作的问题了。
      

  8.   

    if(m_pQPos!=NULL) 

    delete[] m_pQPos; 
    m_pQPos=NULL; 
    } 这段代码是否有问题。
      

  9.   

    应该是其它地方对数组访问越界了!
    建议你在其它地方访问m_pQPos的地方,都注释掉,专门连续调两次 InitialNewQST() 看看,肯定没有问题!这样,就可以断定,这个函数是没有问题的,是你其它地方访问数组造成的!
      

  10.   

    应该自己调试一下啊
    将其余调用init的地方去掉 
    跟踪看看是不是有数组越界操作了
      

  11.   

    我查到了,在InitialNewQST()调用之前,我delete了一次,但是没有m_pQPos=NULL; 
    这样当到了InitialNewQST() 函数中,仍然会进入下面的if语句中
    if(m_pQPos!=NULL) 
        { 
            delete []m_pQPos; //改了一下
            m_pQPos=NULL; 
        } 结果就出错了,大家看是不是这个理由?