2013-07-21 79 views
0

我正在使用qt创建器,并且遇到内存泄漏问题。我已经阅读了一些关于动态内存分配的文章,但是从我看到的内容来看,我无法理解为什么我的函数正在积累内存。使用std :: swap在C++函数中发生内存泄漏

我完全相信我已经精确定位引起该问题的函数:

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]); 

} 

我很是新手,但据我了解,在函数内部创建的对象应该被销毁的时候都结束了。如果有人可以告诉我为什么这个函数导致内存泄漏,我提前感谢你。

+1

** a。** CNet是如何定义的? ** b。**如何检测内存泄漏** c。**如果要立即删除原件,有什么用途来克隆网络(是否有任何状态您明确不复制?) – sehe

+2

您如果您从未分配内存,则无法泄漏:泄漏出现在您未向我们显示的代码中。正如sehe所说,CNet是可疑的,但主要是因为它在我们的脸上。 – Casey

回答

0

我看到它的方式有三种可能性:

1:(最有可能),CNET的析构函数没有正确解除分配由它的构造保留的内存。

要检查,使用全局CNet newNet变量,而不用重新创建临时变量,每次你进入这个程序(而不是仅仅设置全局newNet变量的值),时间,所以你不保持调用构造函数/析构函数。

2:std::swap(newNet, netVector[destination]);电话,我认为创建一个临时变量,这里解释:

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

试评的电话std::swap,看看会发生什么。

3:for循环内部有些东西是可疑的,但您不提供细节。

祝你好运。