关于多维数组delete,我这样写会报错,请各位高手指点,谢谢                           
                        TCHAR **m_p;= new TCHAR *[m_Count];
for(int k=0; k<m_Count; k++)
{
m_p[k] = new TCHAR [128];
memset(m_p[k], 0, 128 * sizeof(TCHAR));
}。
                             for(int k=0; k<m_Count; k++,aaa++)
{
delete[] m_p[k];  //这里会报错,
}
                         delete []m_p;

解决方案 »

  1.   

    我就是这样用的没有问题:
    分配:
    CString **strFault ;
    strFault = new CString*[32];
    for (int m = 0; m < 32; m++)
    {
    strFault[m] = new CString[2];
    }
    删除:
    for ( m = 0; m < 32; m++)
    {
    delete []strFault[m];
    }
      

  2.   


    delete[]   m_p[k];     //这里会报错,
    m_p[k] = NULL;          //防止出现野指针

    delete   []m_p;        //这句就没必要了吧?
      

  3.   

    LZ的这段代码没问题,出错是因为前面的某个操作中对m_p[k]所分配的空间的访问越界了。
      

  4.   

      谢谢各位大侠的参与,我又对自己的代码调试了一下。原来是我对CString 的GetBuffer函数用法不了解造成的,原来的代码里面还有一句:完整的是这样的:
    CString str="abcdefghi";
       TCHAR   **m_p;=   new   TCHAR   *[m_Count]; 
    for(int   k=0;   k <m_Count;   k++) 

    m_p[k]   =   new   TCHAR   [128]; 
    memset(m_p[k],   0,   128   *   sizeof(TCHAR)); 
    m_p[k]=str.GetBuffer;   //程序里面有这句话,问题出现在这里,用这个不用new 也不用delete 了
    } 。 
                                                              for(int   k=0;   k <m_Count;   k++,aaa++) 

    delete[]   m_p[k];     //这里会报错, 

       delete   []m_p;多写各位了,要给分了,刚来csdn 我的分不多,不知道会不会成负的,呵呵。
      

  5.   

    str.GetBuffer
    这个之后要
    str.ReleaseBuffer()
      

  6.   

    GetBuffer??不知有否ReleaseBuffer...
    问题很大...