释放分配给二维向量的内存

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 语言二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

如何为二维数组分配和释放堆内存?

C++:如何安全地释放堆分配的向量数组?

关于构建二维动态内存(堆)及释放

在 C++ 中的 2D 动态内存分配数组中释放分配的内存

C++ 删除不会释放所有内存 (Windows)