您的位置:首页 > 编程语言 > C语言/C++

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


这样,可以对内存进行很好的利用,避免内存泄露。而导致系统运行越来越慢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: