【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);
相關文章
- 解決git記憶體洩露問題Git記憶體洩露
- react 記憶體洩露常見問題解決方案React記憶體洩露
- 使用Windbg快速分析應用記憶體洩露問題記憶體洩露
- SHBrowseForFolder 記憶體洩露記憶體洩露
- JVM 常見線上問題 → CPU 100%、記憶體洩露 問題排查JVM記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 小題大做 | Handler記憶體洩露全面分析記憶體洩露
- ArkTS 的記憶體快照與記憶體洩露除錯記憶體洩露除錯
- ThreadLocal記憶體洩漏問題thread記憶體
- Go坑:time.After可能導致的記憶體洩露問題分析Go記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- 用 TDengine 3.0 碰到“記憶體洩露”?定位問題原因很關鍵記憶體洩露
- Spring Data Redis兩個問題:記憶體洩露和併發 - europaceSpringRedis記憶體洩露
- 前端面試題51----JS記憶體洩露前端面試題JS記憶體洩露
- android Handler導致的記憶體洩露Android記憶體洩露
- Web 前端開發日誌(三):HTML 節點的記憶體洩露問題Web前端HTML記憶體洩露
- redisson記憶體洩漏問題排查Redis記憶體
- Linux記憶體洩露案例分析和記憶體管理分享Linux記憶體洩露
- nodejs爬蟲記憶體洩露排查NodeJS爬蟲記憶體洩露
- Pprof定位Go程式記憶體洩露Go記憶體洩露
- 關於PHP記憶體洩漏的問題PHP記憶體
- 簡單的記憶體“洩露”和“溢位”記憶體
- JAVA記憶體洩露的原因及解決Java記憶體洩露
- Python實現記憶體洩露排查的示例Python記憶體洩露
- win10驅動記憶體洩露如何解決_win10記憶體洩露處理方法Win10記憶體洩露
- netty 堆外記憶體洩露排查盛宴Netty記憶體洩露
- 乾貨分享:淺談記憶體洩露記憶體洩露
- Spring Boot heapdump洩露記憶體分析方法Spring Boot記憶體
- 線上記憶體洩露定位--memleak工具記憶體洩露
- java中如何檢視記憶體洩露Java記憶體洩露
- 記錄一次Halcon C++ ReadShapeModel 反覆呼叫時記憶體洩漏問題C++記憶體
- 記一次"記憶體洩露"排查過程記憶體洩露
- BufferedImage記憶體洩漏和溢位問題記憶體
- 從一次netty 記憶體洩露問題來看netty對POST請求的解析Netty記憶體洩露
- Java面試題:細數ThreadLocal大坑,記憶體洩露本可避免Java面試題thread記憶體洩露
- 一個 Vue 頁面的記憶體洩露分析Vue記憶體洩露