delete[]找数组前面的记录,它记录着数组占多大,然后释放delete只释放一个的空间

解决方案 »

  1.   

    例如:
    char *single;
    char *multi;
    single=new char;
    multi=new char[100];
    .//处理
    .
    .
    //则删除释放为:
    delete single;
    delete []multi;
      

  2.   

    delete[]其实可以理解成for(i=0;i<N;i++) delete a[i];//a[N]为一指针数组
    而delete 只删除当前指针所占用的资源。
      

  3.   

    int* a=new int[100];
    delete[] a =delete all a的元素
    dellete  a=delete a[0],即只delete第一个元素
      

  4.   

    int* a=new int[100];
    delete[] a =delete all a的元素
    dellete  a=delete a[0],即只delete第一个元素 只删除第一个就会崩吗
      

  5.   

    假设 int *a=new int;
         int *b=new int[10];a和b都是指向int的指针,为什么用delete b会崩?
    如果是malloc分配的,用free就没事?
      

  6.   

    第一:错用delete 替代delete[]的确会崩,我遇过好几次,如果如上所说什么delete a[0],为什么会这样呢?
    第二:怎么能把delete[]理解为for(i=0;i<N;i++) delete a[i]呢?new[]分配难道不是一个数据区吗?一个区能一个一个元素delete吗?
      

  7.   

    用delete当然不能删数组,应该用delete[],
    也不用for
    delete[]知道该怎么做!
    用new时他就知道啦!
      

  8.   

    delete删掉的好像不是第一个元素,而是个指针!
    所以才会死!
      

  9.   

    delete[]后面的变量会被认为是数组变量,在删除时delete会计算数组变量的大小和数组的大小,而delete后面的变量会被认为不是数组变量,在删除时delete只计算变量的大小。
      

  10.   

    delete最终是调用什么删除的?
      

  11.   

    Effective C++中有较大篇幅讨论这个问题.应是条款5. 可以看看.
      

  12.   

    用new申请的动态空间,必须用delete释放.delete[] 是伴随C++中 "类(class)"概念引入的,它的作用之一是删除动态申请的"类数组"空间. 即用 p = new classA[n] 申请的连续动态"类空间", 必须用delete[] p 释放. 因为delete[] p可以引起"类" 对象destructor函数的执行。例class A{
      char *name;
    public:
    A(const char* a){ name = new char[strlen(a)+1] }
    ~A(){ delete name; } // 删除了class中动态分配给name的内存
    };main()
    {
       A *p;
       char *psz
       p = new A[10];
       psz = new char[10];
       … …
       delete [] p;   //此处必须用delete [] ,而不能使用delete p.
                  //因为delete p虽然可以删除class A的空间,但不能引起~A()运行,所以不能删除A中动态申请的内存。例如此处的name变量   delete psz;    //Ok
       delete [] psz  //Ok
    }