char *p=new char[80];delete p;

delete []p;请问用delete p;正确还是用delete []p;正确?为什么?

解决方案 »

  1.   

    delete []p;
    p = NULL;
      

  2.   

    你分配的是数组,当然对应的要用delete[]p;了
    如若是 char *p=new char('a');
    则对应的用delete p;p = NULL;
    最好将 p=NULL;
      

  3.   

    楼上对,可以做实验
    例子:
    class Test
    {
    public:
        Test(){printf("tt +\n");}
        ~Test(){printf("tt -\n");}
    };void main()
    {
       {
         Test* pT = new Test[10];
         delete pT;
         pT = NULL;
       }
       _getch();
    }10 + 
    1 - 
      

  4.   

    对于简单基础类型delete和delete[]效果是一样,对于自定义类,就不一样了
      

  5.   

    分配的数组 应该用delete []p;
    如果分配单个变量  就应该用delete p;
    一个好的习惯   delete之后  把p=null;防止野指针的出现
      

  6.   

    #4 说的是对的,但是要多复杂才必须使用 delete[] 的确是一个不太容易清楚的地方;比如:设计一个数据结构,包含多个 int 的数据结构,也可以直接使用 delete 。
      

  7.   

    你要是不怕麻烦,可以调试跟踪一下new 和delete的源代码,看看内存是如何分配的,new delete 都涉及到析构函数的调用,不是简单的分配内存空间,也就是上面几位说的简单数据类型没事,类对象就可能有问题,
      

  8.   

    delete []p;
    p = NULL;
    支持!@
      

  9.   

    就是想弄清楚 delete []p 和 delete p 的差别到底在那里,否则基于习惯和简便,多数会使用 delete p;如果碰到必须使用 delete []p 的场合,可能发生难以调试的错误。
      

  10.   

    正解。所谓简单类型是char int long等基础类型
      

  11.   

    分配的数组 应该用delete []p;
    如果分配单个变量 就应该用delete p;
      

  12.   

    分配的数组 应该用delete []p;
    如果分配单个变量 就应该用delete p;
      

  13.   

    分配的数组 应该用delete []p;
    如果分配单个变量 就应该用delete p;最后置NULL,防止野指针。
      

  14.   

    貌似楼上没有人说得清楚delete []p和delete p的差别。