CArray<bittt,bittt> char_temp;
其中的  char_temp[aaa].bitt是char*的指针我
char_temp[aaa].bitt = new char[10];可是我不能delete他,下面这句话就出错,怎么回事啊?
delete char_temp[aaa].bitt; 
[↑]

解决方案 »

  1.   

    delete [] char_temp[aaa].bitt;
      

  2.   

    delete 说明后面删除的指针是个单一对象,
    而delete []说明后面删除的指针是一个对象数组,假如
    string *stringArray = new string[100];
    ...
    delete stringArray
    那么,又stringArray所指的100个string对象中的99个未必能够被适当的删除,因为它们的destrcctors没有被调用。所以正确的做法是:
    如果你在调用new时使用了[],那么必须在delete时也使用[];
    如果你在调用new时没有使用[],那么也不应该在delete时使用[]
      

  3.   

    可我delete[] char_temp[aaa].bitt;也没用啊,编译可以通过,可是执行的时候就出错了啊。
      

  4.   

    delete[] char_temp[aaa].bitt;
    char_temp[aaa].bitt = NULL;
      

  5.   

    没有问题呀, 范例如下:
    头文件定义
    struct bittt
    {
    char *bitt;
    };
    cpp中
    void OnOK()
    {
    CArray<bittt, bittt> tmp; bittt bit;
    tmp.Add(bit);
    tmp[0].bitt = new char[10];
    delete tmp[0].bitt;
    }运行OK
      

  6.   

    bit  没有初始化有关系吗?
      

  7.   

    你的指针有没有执行过自加(++)自减(--)操作?有的话,你不能delete,因为指针已经不是指向当初你分配空间时候的地址了,是不可预料的,所以不能用delete。
      

  8.   

    你的代码我运行过,但这几行代码是没问题的,不过最后一行最好写成delete []tmp[0].bitt;
      

  9.   

    首先我错误应该和CArray没关系的,即不是由MFC引起的,如果MFC有Bug,估计早就有人测出来了,问题还是在你的代码里面,建议将delete char_temp[aaa].bitt;分两步做,
    char *p = char_temp[aaa].bitt;
    delete p;
    请查看p是否和你当初new返回的地址一致!
      

  10.   

    楼主给出的代码不全,估计可能是你少了例子中的这一步: bittt bit;
    tmp.Add(bit);就是说你那个aaa项是怎么产生的,是否合法?
      

  11.   

    检查char_temp[aaa].bitt new完之后又被赋值了没有(char_temp[aaa].bitt =……)?或者用char_temp[aaa].bitt 的过程中越界!