main()
{
vector<double>it;
double a[100000];
for(int i=0;i<100000;i++)
{
a[i]=i;
}
for(int i=0;i<100000;i++)
{
it.push_back(a[i]);
}
return 0;
}
在 for(int i=0;i<100000;i++)
{
it.push_back(a[i]);
}
之后我如何做 才能让程序占用内存和在这段循环之前的一样多呢?
vector内存释放 c++
答案:4 悬赏:30
解决时间 2021-03-07 11:42
- 提问者网友:熱戀丶瘋
- 2021-03-06 15:01
最佳答案
- 二级知识专家网友:一身浪痞味
- 2021-03-06 16:15
光clear是不释放内存的,将你这段代码修改了一下,你看看,应该能明白了,不明白运行一下就知道了。
#include <vector>
#include <iostream>
using namespace std;
main()
{
vector<double>it;
double a[100000];
for(int i=0;i<100000;i++)
{
a[i]=i;
}
cout << "未放元素时容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //未放元素
for(int i=0;i<100000;i++)
{
it.push_back(a[i]);
}
cout << "放元素后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //放元素
it.clear();
cout << "clear后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //clear
vector<double>().swap(it);
cout << "swap后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //swap
return 0;
}
运行结果:
未放元素时容器大小为: 0容器容量为: 0
放元素后容器大小为: 100000容器容量为: 131072
clear后容器大小为: 0容器容量为: 131072
swap后容器大小为: 0容器容量为: 0
#include <vector>
#include <iostream>
using namespace std;
main()
{
vector<double>it;
double a[100000];
for(int i=0;i<100000;i++)
{
a[i]=i;
}
cout << "未放元素时容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //未放元素
for(int i=0;i<100000;i++)
{
it.push_back(a[i]);
}
cout << "放元素后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //放元素
it.clear();
cout << "clear后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //clear
vector<double>().swap(it);
cout << "swap后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //swap
return 0;
}
运行结果:
未放元素时容器大小为: 0容器容量为: 0
放元素后容器大小为: 100000容器容量为: 131072
clear后容器大小为: 0容器容量为: 131072
swap后容器大小为: 0容器容量为: 0
全部回答
- 1楼网友:绝望伪装
- 2021-03-06 18:57
it.clear();
把里面的元素删掉,内存就还回去了
如果你是想把数组的内存还回去,你开始的时候就
double* a = new double[100000];
然后delete a[];
- 2楼网友:努力只為明天
- 2021-03-06 17:43
couvluzkst7224804053mppwvspoit0628606864很不错哦,你可以试下
zbxceeymwq58314184782011-12-23 下午 10:01:44
楼主的程序可以编译运行。 确实,楼主的程序隐含存在一个问题--内存泄露。具体原因分析如下: 1、类Vector在类定义中存在一个整型指针成员buffer,这个指针成员在类的构造函数中被动态分配内存,但是,在该类的析构函数定义中未将指针内存释放,因此存在内存泄露。 2、如何解决内存泄露的问题呢?一个简单的方法是在类Vector的析构函数中添加指针内存释放指令,比如: ~Vector(){cout<<"Descontructing \n";if (buffer != (int *)NULL) delete buffer; } 但是,这样一来,程序反而运行失败。可以看到,程序中有这样的指令 Vector b(a); // 在对象b创建时,将对象a赋值给对象b 执行完这条指令以后,对象b拥有与对象a相同的数据成员,包括指针buffer,即b.buffer与a.buffer的指针值完全相同。当程序执行完最后一条指令退出时,对象a和b都自动调用析构函数,于是同一块内存(由a.buffer和b.buffer共同指向的动态内存)就被释放两次,程序运行失败。同时,也注意到,上述分析证明了程序演示的结果,即当执行上述指令之后,b.disp()还能够输出a.set()的结果。 3、如何解决动态内存两次释放的问题呢?应用到拷贝构造函数,比如如下定义: Vector::Vector(Vector &obj) { if (obj.buffer != (int *)NULL) { size = obj.size; buffer = new int[size]; memcpy(buffer, obj.buffer, sizeof(int)*size); } else { buffer = (int *)NULL; } } 这样的话,当执行指令 Vector b(a); 时,调用该类的拷贝构造函数来进行赋值。可以看到,此时b.buffer与a.buffer指向了不同的内存块,然而这两个内存块中包含相同的内容,真正做到了安全赋值的作用。
- 3楼网友:心痛成瘾
- 2021-03-06 16:41
光clear是不释放内存的,将你这段代码修改了一下,你看看,应该能明白了,不明白运行一下就知道了。
#include <vector>
#include <iostream>
using namespace std;
main()
{
vector<double>it;
double a[100000];
for(int i=0;i<100000;i++)
{
a[i]=i;
}
cout << "未放元素时容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //未放元素
for(int i=0;i<100000;i++)
{
it.push_back(a[i]);
}
cout << "放元素后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //放元素
it.clear();
cout << "clear后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //clear
vector<double>().swap(it);
cout << "swap后容器大小为: " << it.size() << "容器容量为: " << it.capacity() << endl; //swap
return 0;
}
运行结果:
未放元素时容器大小为: 0容器容量为: 0
放元素后容器大小为: 100000容器容量为: 131072
clear后容器大小为: 0容器容量为: 131072
swap后容器大小为: 0容器容量为: 0
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯