原帖地址: http://topic.csdn.net/u/20071027/12/a31bf228-7b4f-40b2-be41-e3b859f643d4.html

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

哪个对 为什么?
----------------------------
delete[] p; 标准做法,通常说,避免内存泄露

必须要有‘[]’符号用以告诉编译器,指针(此处当然是你的p)所指向的是数组,因此在释放pc所指向的内存区块时必须要查询和使用该数组的维度信息,这样才能完全释放p所指的数组占用的内存资源。C++编译器出于效率上的考虑,仅在有‘[]’时,才会查询数组的维度信息。否则,编译器将认为p指向的是单个内存单元,因而delete掉p所指向的单个内存单元造成内存资源泄漏。至于有些朋友有意对数组的delete操作不用‘[]’而没有觉得程序的运行有异常,但我要告诉你们:"内存资源确时已经发生了泄漏!!!只是你的程序规模较小,且运行在一个碰巧相对安全的内存空间,以至你没有发现异常现象而以!"
请参考《C++ Common Knowledge》-条款36-page93。

另外,还可从另一角度说明'delete[]p'与'delete p'存在区别的重要性:

我想大家一定知道,很多C++大师在大谈著名的auto_ptr <typename T>好处的时候,总会明确的告誡使用者,不要把它用于数组!
即你不能如下使用auto_ptr:

char* _parray = new char[100];
auto_ptr <char> _parray(_p);//哎呀!......

为什么呢?就正是因为auto_ptr的析构函数中使用"delete _p;"而不是"delete []p;"!这样,在_parray生命终止后将造成内存泄漏!

char *p = new char[256]; delete p; / delete[] p; 哪个对 为什么相关推荐

  1. 关于delete和delete[]

    [精彩] 求问delete和delete[] 的区别?? http://www.chinaunix.net/jh/23/311058.html C++告诉我们在回收用 new 分配的单个对象的内存空间 ...

  2. C++ delete 和 delete []的区别

    转载自https://blog.csdn.net/cbNotes/article/details/38900799 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指 ...

  3. delete 和 delete [] 的真正区别

    c++中对new申请的内存的释放方式有delete和delete[]两种方式,到底这两者有什么区别呢? 1.我们通常从教科书上看到这样的说明: delete 释放new分配的单个对象指针指向的内存 d ...

  4. delete与delete[]的区别

    一直对C++中的delete和delete[]的区别不甚了解,今天遇到了,上网查了一下,得出了结论.做个备份,以免丢失. C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete ...

  5. char *a 与char a[] 的区别和char** argv与char *argv[]区别

    char *a 与char a[] 的区别 char *a = "hello" 中的a是指向第一个字符'a'的一个指针 char a[20] = "hello" ...

  6. 为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样-------_CrtMemBlockHeader

    为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样-------_CrtMemBlockHeader ------jiese1990 温馨提示: 该文所 ...

  7. delete 和 delete []

    当调用delete的时候,系统会自动调用已分配的对象的析构函数.当我们用new [] 分配的对象是基本数据类型时,用delete和delete [] 没有区别.但是,当分配的对象是自定义对象时,二者不 ...

  8. char *p=new char

    char *p=new char问题: 按理 return p应该返回一个字符,可是我这return p 依然是返回一个字符串, 那么说开辟一个字符空间与开辟一个字符串空间的方法是通用的? ----- ...

  9. 深入理解C++ new/delete, new []/delete[]动态内存管理

    在C语言中,我们写程序时,总是会有动态开辟内存的需求,每到这个时候我们就会想到用malloc/free 去从堆里面动态申请出来一段内存给我们用.但对这一块申请出来的内存,往往还需要我们对它进行稍许的& ...

最新文章

  1. 【UIDynamic例子】挂起的方块
  2. C语言中降序qsort通用写法
  3. MPB:西农郑伟-土壤水稳性团聚体微生物组样品制备方法
  4. spring集成redis(ehcache缓存改成redis)
  5. 5G PDCCH介绍
  6. bzoj1115: [POI2009]石子游戏Kam
  7. ExecutionException异常
  8. jQuery 操作 CSS
  9. UVA----10082 WERTYU【字符串】
  10. java 旅行家的预算_旅行家的预算
  11. 广州测试沙龙的问题。
  12. CF935D Fafa and Ancient Alphabet 概率dp(递推)
  13. 异步fifo_FIFO工作的原理
  14. airtest 多设备同时运行_Airtest Project(1) -- 多种连接设备的方式
  15. 《逻辑与计算机设计基础(原书第5版)》——导读
  16. esxi update patch
  17. java下载不了_教大家电脑java安装不了怎么办
  18. 2021年中国手游行业发展现状及未来发展趋势分析[图]
  19. 诚之和:谁在抢救瑞幸咖啡?
  20. 随机数模拟抛硬币实验

热门文章

  1. 庆祝我的第一个WebGis完成-c#+MapXtreme2004
  2. xtrabackup部署以及使用
  3. JavaScript简介及基础知识(1)
  4. am335x backlight
  5. RAX,eax,ax,ah,al 关系
  6. 从QQ空间热度分析看社区营销
  7. poto——剧院魅影——phantom of the opera
  8. 错误提示:error LNK2001: unresolved external symbol public: static int person::weight (?weight@person@@
  9. js如何操作或是更改sass里的变量
  10. 算法2(二分查找法)