c++---内存问题---delete p和delete[]p 区别
来源:互联网 发布:网络端口怎么拆下来 编辑:程序博客网 时间:2024/06/04 18:32
void test()
{
char*p1 = NULL;
char*p2 = NULL;
p1 = new char;
printf("p1 = %p\n",p1);
delete p1;
printf("p1 = %p\n",p1);
p2 = new char;
printf("p2 = %p\n",p2);
}
class AA
{
public:
AA(){printf("aa\n");}
~AA(){printf("~aa\n");}
private:
int a;
};
void test3()
{
AA *p = NULL;
p = new AA[10];
// eroor delete p;
delete []p;
}
void test2()
{
char *p = new char[10];
//delete p; //right
delete []p;
}
{
private:
int i;
string s;
public:
~A(){printf("~a\n");}
};
void d(A* p)
{
delete []p;
//delete p; //error
}
void test1()
{
A *p = new A[10];
d(p);
}
int main()
{
test();
return 0;
{
char*p1 = NULL;
char*p2 = NULL;
p1 = new char;
printf("p1 = %p\n",p1);
delete p1;
printf("p1 = %p\n",p1);
p2 = new char;
printf("p2 = %p\n",p2);
}
运行结果
p1 = 0x82f7008
p1 = 0x82f7008
p2 = 0x82f7008
分析
地址没有变化
class AA
{
public:
AA(){printf("aa\n");}
~AA(){printf("~aa\n");}
private:
int a;
};
void test3()
{
AA *p = NULL;
p = new AA[10];
// eroor delete p;
delete []p;
}
void test2()
{
char *p = new char[10];
//delete p; //right
delete []p;
}
运行结果
aa
aa
aa
aa
aa
aa
aa
aa
aa
aa
~aa
~aa
~aa
~aa
~aa
~aa
~aa
~aa
~aa
~aa
{
private:
int i;
string s;
public:
~A(){printf("~a\n");}
};
void d(A* p)
{
delete []p;
//delete p; //error
}
void test1()
{
A *p = new A[10];
d(p);
}
int main()
{
test();
return 0;
}
结论
基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;
但是对于类对象数组,只能用 delete[]。
对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。
delete []objects; // 正确的用法
delete objects; // 错误的用法
后者相当于delete objects[0],漏掉了另外99 个对象
严格应该这样说:后者相当于仅调用了objects[0]的析构函数,漏掉了调用另外99 个对象的析构函数,并且在调用之后释放内存时导致异常
(如果存在析构函数的话),如果对象无析构函数该语句与delete []objects相同
阅读全文
0 0
- c++---内存问题---delete p和delete[]p 区别
- delete p和delete[] p的区别
- delete p 和delete []p的区别
- delete p和delete[] p的区别
- delete p和delete[] p的区别
- delete p和delete[] p的区别
- delete p和delete[] p的区别
- delete p与delete p[]的区别
- 为什么delete p;后最好加上p = NULL; ? (浅谈内存泄露和内存过度释放)
- (C)*p++和*++p区别
- C++delete和delete[]区别
- char* p = new char [20] delete p 出现问题!
- delete char *p
- delete p指针
- [Happy Coding] delete p;而不是delete [] p; 真的会导致内存泄漏吗?
- *p,p和&p区别:
- p重新调用多次new及delete的内存泄露问题
- 学习笔记-delete p与delete []p-sizeof()-strtok
- ios-GCD的队列介绍
- 深度优先搜索
- cmd命令行中执行Java文件中文字符乱码情况解决
- JavaScript_05
- Web系统大规模并发——电商秒杀与抢购
- c++---内存问题---delete p和delete[]p 区别
- ecshop jquery与transport.js冲突解决方案
- 线程调度算法分析
- n个数的排序--堆排序
- Livy:基于Apache Spark的REST服务
- dubbo简介,dubbo架构,dubbo的方法
- poj 3616 Milking Time【最大递增子序列】
- 不同量化平台上财务数据精度的测试
- jquery easyui的datagrid,使用combotree作为editor不能多选的问题