delete和delete[]是怎样处理的,都是指针,为何错用delete替delete[]就会崩? delete[]找数组前面的记录,它记录着数组占多大,然后释放delete只释放一个的空间 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例如:char *single;char *multi;single=new char;multi=new char[100];.//处理..//则删除释放为:delete single;delete []multi; delete[]其实可以理解成for(i=0;i<N;i++) delete a[i];//a[N]为一指针数组而delete 只删除当前指针所占用的资源。 int* a=new int[100];delete[] a =delete all a的元素dellete a=delete a[0],即只delete第一个元素 int* a=new int[100];delete[] a =delete all a的元素dellete a=delete a[0],即只delete第一个元素 只删除第一个就会崩吗 假设 int *a=new int; int *b=new int[10];a和b都是指向int的指针,为什么用delete b会崩?如果是malloc分配的,用free就没事? 第一:错用delete 替代delete[]的确会崩,我遇过好几次,如果如上所说什么delete a[0],为什么会这样呢?第二:怎么能把delete[]理解为for(i=0;i<N;i++) delete a[i]呢?new[]分配难道不是一个数据区吗?一个区能一个一个元素delete吗? 用delete当然不能删数组,应该用delete[],也不用fordelete[]知道该怎么做!用new时他就知道啦! delete删掉的好像不是第一个元素,而是个指针!所以才会死! delete[]后面的变量会被认为是数组变量,在删除时delete会计算数组变量的大小和数组的大小,而delete后面的变量会被认为不是数组变量,在删除时delete只计算变量的大小。 delete最终是调用什么删除的? Effective C++中有较大篇幅讨论这个问题.应是条款5. 可以看看. 用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} 求助:如何实现将文件名拖到视图区打开? 如何自动钩选网页上的复选框选项 怎么样一开始就定死用ATL COM向导建立的控件ActiveX Control控件的大小????? 谁来指点一下给多分 怎么在一个project中删除一个文件? 控件焦点问题,分不多,但绝对给!! 看看问题在哪里,MDI+切分窗口 请问在程序中如何控制按钮移动到新的位置,怎么实现啊 如何自定义一个全局结构给详细资料结帖!!! windows编程哪里抄错了啊。 没做过控制台程序,生成一个空的 请问各位!VC中MD5数据加密算法的函数是WHAT???
char *single;
char *multi;
single=new char;
multi=new char[100];
.//处理
.
.
//则删除释放为:
delete single;
delete []multi;
而delete 只删除当前指针所占用的资源。
delete[] a =delete all a的元素
dellete a=delete a[0],即只delete第一个元素
delete[] a =delete all a的元素
dellete a=delete a[0],即只delete第一个元素 只删除第一个就会崩吗
int *b=new int[10];a和b都是指向int的指针,为什么用delete b会崩?
如果是malloc分配的,用free就没事?
第二:怎么能把delete[]理解为for(i=0;i<N;i++) delete a[i]呢?new[]分配难道不是一个数据区吗?一个区能一个一个元素delete吗?
也不用for
delete[]知道该怎么做!
用new时他就知道啦!
所以才会死!
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
}