delete p[i];//那位老兄说的我也不明白

解决方案 »

  1.   

    问题又多了一个,p[i]是字符型的指针,new的时候用了[],delete的时候也应该用[]才对啊?
      

  2.   

    char *p;
    char a[100];
    p=new a;
    delete []p;
    可能是这样的!!具体是怎样的,我记不清了!!
    SORRY!!
      

  3.   

    delete []p;
    删除的是指针数组  不是数阻一般的数组 直接delete 就可以了
      

  4.   

    說甚麼中國程序員, 係http://www.csdn.net/expert/topic/379/379417.shtm中
    #include <fstream.h>
    #include <assert.h>
    #include <string.h>void main()
    {
    const MaxLine = 5;
    char *p[MaxLine];const SZ = 255;
    char buf[SZ];ifstream in("test.dat");
    assert(in);
    int LineCount = 0;while(in.getline(buf, SZ) && LineCount < MaxLine)
    {
    char *temp = new char[strlen(buf)];
    strcpy(temp, buf);
    p[LineCount++] = temp;
    }for (int i = 0; i < LineCount; i++)
    {
    cout<<p[i]<<endl;
    delete []p[i];    ///为什么这句会出错
    }
    }
    根本就係因為佢無分配'\0'給每一行(p[i]), 當strcpy時, 因為strcpy在p[i]這個字串的最後加入了一個'\0', 所以超越了所分配的內存, 把內存的控制塊破壞了, 但這個Byte是可讀可寫的, 所以不會引起即時的錯誤(但已種下了一個陷井), 當free固內存時, 由於內存控制塊已被破壞, 所以發生"DAMAGE: after Normal block (#25)"錯誤.
    因些只需把:
    char *temp = new char[strlen(buf)]; 改成 char *temp = new char[strlen(buf) + 1];
    就可以啦! 唔信可以試試!
    但這班所謂的中國程序員, 在這個小問題上爭論不休, 連什麼內存與Null-terminated String(For example:"hello"有五個字, 但是存在內存是"hello\0"共六個字=5+1)都分不清楚, 還敢上來CSDN講話發表文章, 回去看什麼"C語言X日通"吧!
      

  5.   

    To thomas269(Thomas): 高手都在忙着做活, 只有爱学习弱人才来这里乱侃~~~你又算哪跟葱?说程序员们不行可以, 但不要带上中国来修饰~~懂吗?白痴~~~~