C++中new与delete问题学习
来源:互联网 发布:淘宝网高达模型 编辑:程序博客网 时间:2024/06/05 08:55
C++中new与delete问题学习
一.new char与delete问题
1. 问题程序
#include <iostream>using namespace std;void main(){ char* des = new char();des = "testing!";cout<<des<<endl;delete des; //这个delete需要吗}
2. 错误
当运行到delete时,程序出错!
3. 解答
v1
你用new申请了一个char空间,把它的地址保存在了des这个指针里面
然后你又把"testing!"这个常量字符串的地址赋给了des这个指针
于是,你之前用new申请的那个空间就丢失了,在程序结束系统回收全部内存前,那个空间就被标明被你使用但实际上你已经丢失它的地址没办法再使用它了,这就是最常见的内存泄露
delete出错理所当然,因为你delete的不是你new的那个空间。甲被乙骗了钱不能去法院起诉丙,丙是无辜的
v2
1.
char* des = new char();
应该只分配一个byte的空间,而后面的des = "testing!";我猜楼主的意图是要将"testing!"放入des所指向的空间,很显然实际上是放不下去的。之所以输出有没有问题,是刚好将"testing"的首地址给了des,这就改变des的值,也就是des = "testing!"中的des,和前面的char* des = new char();已经不同了。
4. 正确代码
V1
#include <iostream>using namespace std; void main(){ char* des = new char[10]; memset(des, 0, 10); strcpy(des, "testing!"); cout << des << endl; delete des;}
V2 严格版
#include <iostream>using namespace std; void main(){ char* des = new char[10]; memset(des, 0, 10); strcpy(des, "testing!"); cout << des << endl; delete[] des; // new[]和delete[]对应。但由于char是基本数据类型,所以6楼那样写应该也是没有问题的}
二.new int与delete
1. 程序
#include <iostream>using namespace std; void main(){//一维整型指针 int *a = new int [2]; for (int i=0;i<2;i++) { a[i] = 1; } for (int i=0;i<2;i++) { printf("%d \n",a[i]); } delete[] a; //二维整型指针 int **b = new int *[2]; for (int i=0;i<2;i++) { b[i] = new int [2]; } for (int i=0;i<2;i++) { for (int j=0;j<2;j++) { b[i][j] = 2; } } for (int i=0;i<2;i++) { for (int j=0;j<2;j++) { printf("%d ",b[i][j]); } printf("\n"); } for (int i=0;i<2;i++) { delete[] b[i]; } delete[] b; system("pause");}
2. 程序运行正常
除char以外的基本数据类型,在进行指针释放时一般不用考虑太多,主要是因为没有字符串的赋值(实质是地址的赋值)。
三.小结
在new的类型中,涉及到地址赋值,要千万小心!
- C++中new与delete问题学习
- C++中new与delete问题学习
- C++中new、delete 与new[]、delete[]
- C/C++ New与Delete
- Qt中new与delete
- c++中new与delete
- 【C++】new delete & new[] delete[]
- new&delete 与 new[]&delete[]
- 学习C++(operator new 和 operator delete)
- c++-new与delete运算符
- C++new与delete以及空指针
- C/C++中new/delete malloc/free
- Vector的new与delete问题
- C++学习之new 与 delete表达式
- C++中new和delete学习总结
- 驱动程序中重载new与delete
- C++中new与delete的用法
- qt中new与delete的使用
- Server Error in '/fdc' Application错误解决办法
- 2013年1季度中国汽车车型动力满意度研究报告 ——合资A+级车
- 作业
- 用twisted创建tcp socket长链接amf server服务
- 杭电2048
- C++中new与delete问题学习
- 一步一步学习springmvc之一:基本环境的搭建
- 黑马程序员_反射
- Mongodb 数据结构-BSON
- 盈利从免费开始!
- linux+nginx+python+django环境配置
- jquery实现冒泡提示
- 用MES扩展精益制造
- 解决汉字+数字和英文会换行的问题