C++ 如何重复利用一个内存地址块
2015-03-30 11:35
316 查看
#include<iostream> using namespace std; const int size = 10; double buf[size] = {0}; int main(int argv ,char * args[]) { double *p1,*p2; p1 = new double[size]; p2 = new (buf)double[size]; for (int i = 0; i < size; i++) { p1[i]=p2[(i+2)%size]=i+2; cout << "p1== " << &p1[i] << " p1[i]=="<<p1[i]<<" "<< endl; } cout << "---------------华丽丽的分割线-----------------------" << endl; for (int i = 0; i < size; i++) { cout << "p2== " << &p2[i] << " p2[i]==" << p2[i] << " " << endl; } cout << "---------------一大波内存袭来!-----------------------" << endl; double *p3, *p4; p3 = new double[size]; p4 = new (buf)double[size]; for (int i = 0; i < size; i++) { p3[i] = p4[(i + 2) % size] = i + 2; cout << "p3== " << &p3[i] << " p3[i]==" << p3[i] << " " << endl; } cout << "---------------华丽丽的分割线-----------------------" << endl; for (int i = 0; i < size; i++) { cout << "p4== " << &p4[i] << " p4[i]==" << p4[i] << " " << endl; } cout << "###################华丽丽的分割线########################" << endl; //数组指针 double *p[] = {p1,p2,p3,p4}; for (int i = 0; i < 4; i++) for (int j = 0; j < size; j++) { cout << "p["<<i<<"]== " << &p[i][j] << " p["<<i<<"]"<<"["<<j<<"]==" << p[i][j] << " " << endl; } for (int i = 0; i < 4; i++) { //释放new创建的内存 if (p[i]!=buf) delete [] p[i] ; } cout << "内存释放之后" << endl; for (int i = 0; i < size; i++) { cout << "p1== " << &p1[i] << " p1[i]==" << p1[i] << " " << endl; } cin.get(); return 0; }
p1== 0038DC28 p1[i]==2 p1== 0038DC30 p1[i]==3 p1== 0038DC38 p1[i]==4 p1== 0038DC40 p1[i]==5 p1== 0038DC48 p1[i]==6 p1== 0038DC50 p1[i]==7 p1== 0038DC58 p1[i]==8 p1== 0038DC60 p1[i]==9 p1== 0038DC68 p1[i]==10 p1== 0038DC70 p1[i]==11 ---------------华丽丽的分割线----------------------- p2== 0125C2D0 p2[i]==10 p2== 0125C2D8 p2[i]==11 p2== 0125C2E0 p2[i]==2 p2== 0125C2E8 p2[i]==3 p2== 0125C2F0 p2[i]==4 p2== 0125C2F8 p2[i]==5 p2== 0125C300 p2[i]==6 p2== 0125C308 p2[i]==7 p2== 0125C310 p2[i]==8 p2== 0125C318 p2[i]==9 ---------------一大波内存袭来!----------------------- p3== 0038B1F8 p3[i]==2 p3== 0038B200 p3[i]==3 p3== 0038B208 p3[i]==4 p3== 0038B210 p3[i]==5 p3== 0038B218 p3[i]==6 p3== 0038B220 p3[i]==7 p3== 0038B228 p3[i]==8 p3== 0038B230 p3[i]==9 p3== 0038B238 p3[i]==10 p3== 0038B240 p3[i]==11 ---------------华丽丽的分割线----------------------- p4== 0125C2D0 p4[i]==10 p4== 0125C2D8 p4[i]==11 p4== 0125C2E0 p4[i]==2 p4== 0125C2E8 p4[i]==3 p4== 0125C2F0 p4[i]==4 p4== 0125C2F8 p4[i]==5 p4== 0125C300 p4[i]==6 p4== 0125C308 p4[i]==7 p4== 0125C310 p4[i]==8 p4== 0125C318 p4[i]==9 ###################华丽丽的分割线######################## p[0]== 0038DC28 p[0][0]==2 p[0]== 0038DC30 p[0][1]==3 p[0]== 0038DC38 p[0][2]==4 p[0]== 0038DC40 p[0][3]==5 p[0]== 0038DC48 p[0][4]==6 p[0]== 0038DC50 p[0][5]==7 p[0]== 0038DC58 p[0][6]==8 p[0]== 0038DC60 p[0][7]==9 p[0]== 0038DC68 p[0][8]==10 p[0]== 0038DC70 p[0][9]==11 p[1]== 0125C2D0 p[1][0]==10 p[1]== 0125C2D8 p[1][1]==11 p[1]== 0125C2E0 p[1][2]==2 p[1]== 0125C2E8 p[1][3]==3 p[1]== 0125C2F0 p[1][4]==4 p[1]== 0125C2F8 p[1][5]==5 p[1]== 0125C300 p[1][6]==6 p[1]== 0125C308 p[1][7]==7 p[1]== 0125C310 p[1][8]==8 p[1]== 0125C318 p[1][9]==9 p[2]== 0038B1F8 p[2][0]==2 p[2]== 0038B200 p[2][1]==3 p[2]== 0038B208 p[2][2]==4 p[2]== 0038B210 p[2][3]==5 p[2]== 0038B218 p[2][4]==6 p[2]== 0038B220 p[2][5]==7 p[2]== 0038B228 p[2][6]==8 p[2]== 0038B230 p[2][7]==9 p[2]== 0038B238 p[2][8]==10 p[2]== 0038B240 p[2][9]==11 p[3]== 0125C2D0 p[3][0]==10 p[3]== 0125C2D8 p[3][1]==11 p[3]== 0125C2E0 p[3][2]==2 p[3]== 0125C2E8 p[3][3]==3 p[3]== 0125C2F0 p[3][4]==4 p[3]== 0125C2F8 p[3][5]==5 p[3]== 0125C300 p[3][6]==6 p[3]== 0125C308 p[3][7]==7 p[3]== 0125C310 p[3][8]==8 p[3]== 0125C318 p[3][9]==9 内存释放之后 p1== 0038DC28 p1[i]==-1.45682e+144 p1== 0038DC30 p1[i]==-1.45682e+144 p1== 0038DC38 p1[i]==-1.45682e+144 p1== 0038DC40 p1[i]==-1.45682e+144 p1== 0038DC48 p1[i]==-1.45682e+144 p1== 0038DC50 p1[i]==-1.45682e+144 p1== 0038DC58 p1[i]==-1.45682e+144 p1== 0038DC60 p1[i]==-1.45682e+144 p1== 0038DC68 p1[i]==-1.45682e+144 p1== 0038DC70 p1[i]==-1.45682e+144
这样,可以对内存进行很好的利用,避免内存泄露。而导致系统运行越来越慢!
相关文章推荐
- java怎么判断两个Set 里的对象的值是否相同【两个set中的值是否相等】、java treeset和hashset如何判断元素是否相同【即对象是否完全相同;利用一个set去除重复元素】
- C#如何从普通C++动态库导入一个类?
- 在Oracle中如何利用Rowid查找和删除表中的重复记录(转)
- 如何利用Xerces C++正确处理XML文档中的WhiteSpace
- modern c++ design 笔记(如何列印一个TYPELIST)
- C++ STL Vector(容器) 如何有效一次性删除多个重复值?
- 如何利用一个FILE控件,一次上传多个附件到数据库
- Vc++ 6.0 如何避免重复包含一个头文件 error C2011:
- 如何引入一个lib到C++工程中
- 如何避免重复包含一个头文件?#ifndef #define #endif #Pragma
- 在Oracle中如何利用Rowid查找和删除表中的重复记录
- C#如何从普通C++动态库导入一个类?
- JAVA如何利用接口制造类似于C++的多继承
- 利用MYSQL的C API编程,如何确定一个数据库/表是否存在???
- 如何判断数据库中1个表已经存在,这样不会重复创建一个新表(用sql语句)
- 如何把一个char重复若干次生产std::string
- C++中如何让一个类不能被继承
- DirectX中利用COM的特性避免重复加载一个纹理
- 如何成为一个合格的C++程序员---也不知是谁说的!!!
- 如何利用Xerces C++解析包含中文字符的XML文档