//double ***m_pDeepH;
//m_nMBC=1000
//m_nIM=100
//m_nJM=100
if(m_pDeepH==NULL)
{
m_pDeepH=new double**[m_nMBC+1];
for(int k=1;k<(m_nMBC+1);k++)
{
m_pDeepH[k]=new double*[m_nIM+1];
or(i=1;i<(m_nIM+1);i++)
{
m_pDeepH[k][i]=new double[m_nJM+1];
for(j=1;j<m_nJM+1;j++)
{
m_pDeepH[k][i][j]=0.0;
}
}
}注意,以下释放出现问题,当k=2的时候,提示错误指针内容为空
if(m_pDeepH!=NULL)
{
for(int k=1;k<(m_nMBC+1);k++)
{
for(int i=1;i<(m_nIM+1);i++)
{
delete []m_pDeepH[k][i];
m_pDeepH[k][i]=NULL;
} delete []m_pDeepH[k];
m_pDeepH=NULL;
}
delete []m_pDeepH;
m_pDeepH=NULL;
}

解决方案 »

  1.   

    注意,以下释放出现问题,当k=2的时候,提示错误指针内容为空
    if(m_pDeepH!=NULL)
    {
    for(int k=1;k<(m_nMBC+1);k++)
    {
    for(int i=1;i<(m_nIM+1);i++)
    {
    delete []m_pDeepH[k][i];
    m_pDeepH[k][i]=NULL;
    } delete []m_pDeepH[k];
    m_pDeepH=NULL;  //!!!!!!!!这里错啦!!!!!!!改:m_pDeepH[k]=NULL;
    }
    delete []m_pDeepH;
    m_pDeepH=NULL;
    }
      

  2.   

    m_pDeepH=NULL;  这句错了,到k=2的时候delete []m_pDeepH[k][i];就会出问题,因为上次循环(k=1时)m_pDeepH已经为NULL
      

  3.   

    OK,搞定,thank superS(super慢) ,给分,我都8000多分,太多了,散点了!
      

  4.   

    同意楼上:m_pDeepH是指针的指针,一旦为NULL下次再也不能用了