【问题标题】: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。这就是我们滚动的方式。

标签: c++ memory vector


【解决方案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循环,效果一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2011-11-05
    • 2017-12-26
    • 2015-06-10
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多