首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用std::swap的C++函数中存在内存泄漏

使用std::swap的C++函数中存在内存泄漏
EN

Stack Overflow用户
提问于 2013-07-21 23:37:54
回答 1查看 948关注 0票数 0

我正在使用qt creator,我遇到了内存泄漏的问题。我读过一些关于动态内存分配的文章,但从我所看到的来看,我不能理解为什么我的函数会在内存中积累一些东西。

我完全确定我已经找出了导致问题的函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void CSimWindow::cloneNet(int origin, int destination)

    int newNumSensors = netVector[origin].getNumSensors();
    int newNumActuators = netVector[origin].getNumActuators();
    int newNumNeurons = netVector[origin].getNumNeurons();

    CNet newNet(newNumNeurons, 0);
    newNet.setNumSensors(newNumSensors);
    newNet.setNumActuators(newNumActuators);

    for (int i = 0; i < netVector[origin].getNumNeurons(); i++)
    {
        ...
    }
    std::swap(newNet, netVector[destination]);

}

我是一个新手,但据我所知,在函数中创建的对象应该在它完成时销毁。如果有人能告诉我为什么这个函数会导致内存泄漏,我提前感谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-21 23:54:22

在我看来,有三种可能性:

1:(最有可能的) CNet析构函数没有正确释放由其构造函数保留的内存。

要检查这一点,请使用全局CNet newNet变量,并且不要在每次进入此例程时都重新创建临时变量(而只需设置全局newNet变量的值),这样就不必一直调用构造函数/析构函数。

2:std::swap(newNet, netVector[destination]);调用,我认为它创建了一个临时变量,如下所示:

http://www.cplusplus.com/reference/algorithm/swap/

尝试对std::swap调用进行注释,看看会发生什么。

3: for循环中的某些内容很可疑,但您没有在其中提供详细信息。

祝好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17778061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文