【c++】vector.clear()的記憶體洩露問題
轉自:http://www.cnblogs.com/taiyang-li/p/5997021.html
例一
vector<int> vec;
while (1)
{
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
....
// 處理的vec
func(vec);
// 釋放vec記憶體
vec.clear();
}
例二
#include <iostream>
#include <vector>
using namespace std;
vector <string> v;
char ch;
int main ()
{
for(int i=0; i<1000000; i++)
v.push_back("abcdefghijklmn");
cin >> ch;
// 此時檢查記憶體情況 佔用54M
v.clear();
cin >> ch;
// 此時再次檢查, 仍然佔用54M
cout << "Vector 的 容量為" << v.capacity() << endl;
// 此時容量為 1048576
vector<string>(v).swap(v);
cout << "Vector 的 容量為" << v.capacity() << endl;
// 此時容量為0
cin >> ch;
// 檢查記憶體,釋放了 10M+ 即為資料記憶體
return 0;
}
可是使用clear釋放vector記憶體有是問題的,可參考c++標準:
clear只是將vector的size置零,可是並不保證capacity為零,因此clear並不能釋放vector已經申請的記憶體。可使用vector<T>().swap(x)完成釋放記憶體的操作。swap技法就是通過交換函式swap(),使得vector離開其自身的作用域,從而強制釋放vector所佔的記憶體空間
比如
hierarchy.clear();
vector<Vec4i>(hierarchy).swap(hierarchy);
contours.clear();
vector<vector<Point>>(contours).swap(contours);
mu.clear();
vector<Moments>(mu).swap(mu);
mc.clear();
vector<Point2f>(mc).swap(mc);
相關文章
- 記憶體洩露引起的問題記憶體洩露
- ThreaLocal記憶體洩露的問題記憶體洩露
- JVM與記憶體洩露問題JVM記憶體洩露
- Scrapy的記憶體洩露問題總結記憶體洩露
- 解決git記憶體洩露問題Git記憶體洩露
- Js記憶體洩露問題總結JS記憶體洩露
- PHP的記憶體洩露問題與垃圾回收PHP記憶體洩露
- 難解決的記憶體洩露(OutOfMemory)問題!!!記憶體洩露
- 記憶體洩露記憶體洩露
- SQL Server 記憶體洩露(memory leak)——遊標導致的記憶體問題SQLServer記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- react 記憶體洩露常見問題解決方案React記憶體洩露
- 使用Windbg快速分析應用記憶體洩露問題記憶體洩露
- C++記憶體洩露檢查的5個方法C++記憶體洩露
- SQL Server 記憶體洩露”(memory leak)的案例—遊標導致的記憶體問題SQLServer記憶體洩露
- js記憶體洩露的原因JS記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露
- IE中的記憶體洩露記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- JVM 常見線上問題 → CPU 100%、記憶體洩露 問題排查JVM記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- JavaScript中的記憶體洩露模式JavaScript記憶體洩露模式
- iOS Target-Action模式下記憶體洩露問題深入探究iOS模式記憶體洩露
- AFN的記憶體洩漏問題記憶體
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- 學習Java:記憶體洩露Java記憶體洩露
- Go坑:time.After可能導致的記憶體洩露問題分析Go記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- 用 TDengine 3.0 碰到“記憶體洩露”?定位問題原因很關鍵記憶體洩露
- 如何避免JavaScript的記憶體洩露及記憶體管理技巧JavaScript記憶體洩露
- 記一次Go websocket 專案記憶體洩露排查 + 使用Go pprof定位記憶體洩露GoWeb記憶體洩露
- python 記憶體洩露的診斷Python記憶體洩露
- HibernateDaoSupport 記憶體洩漏的問題!記憶體