释放分配给二维向量的内存
Posted
技术标签:
【中文标题】释放分配给二维向量的内存【英文标题】:Freeing memory allocated to a 2-dimensional vector 【发布时间】:2013-06-19 04:20:12 【问题描述】:我有以下二维向量:
std::vector<std::vector<int>> m_scoreVector;
我尝试使用以下代码来释放分配的内存。但是,它不起作用。只会释放一小部分内存:
for (int k = 0; k < m_scoreVector.size(); ++k)
std::vector<int>().swap(m_scoreVector[k]);
m_scoreVector[k].shrink_to_fit();
m_scoreVector[k].clear();
std::vector<std::vector<int>>().swap(m_scoreVector);
m_scoreVector.shrink_to_fit();
m_scoreVector.clear();
我是内存管理的新手。请让我知道我应该如何释放为此向量分配的内存。 谢谢。
【问题讨论】:
它已为您释放。真的就这么简单。 不是!每次运行时,该向量都会获得 2000 KB,但它只释放 200 KB! 您如何确定正在使用多少内存? @Bipario 尝试运行您怀疑可能存在内存泄漏的代码 10,000、100,000 或 1,000,000 次。然后如果有内存泄漏,你就会知道,因为它会加起来那么多。 @Bipario,查找 RAII。这就是我们滚动的方式。 【参考方案1】:向量为您管理内存。当它们超出范围时,它们将释放内存。一般来说,如果你不使用 new 或 malloc 分配内存,你也不必担心释放它。
【讨论】:
【参考方案2】:swap()和shrink_to_fit()是释放vector内存的两种方式,不能一起用
试试这个代码:
for (int k = 0; k < m_scoreVector.size(); ++k)
m_scoreVector[k].clear();
m_scoreVector[k].shrink_to_fit();
m_scoreVector.clear();
m_scoreVector.shrink_to_fit();
【讨论】:
我试过m_scoreVector.clear(); m_scoreVector.shrink_to_fit();
没有那个for循环,效果一样。以上是关于释放分配给二维向量的内存的主要内容,如果未能解决你的问题,请参考以下文章
C 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )