我正在使用qt creator,我遇到了内存泄漏的问题。我读过一些关于动态内存分配的文章,但从我所看到的来看,我不能理解为什么我的函数会在内存中积累一些东西。
我完全确定我已经找出了导致问题的函数:
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]);
}
我是一个新手,但据我所知,在函数中创建的对象应该在它完成时销毁。如果有人能告诉我为什么这个函数会导致内存泄漏,我提前感谢你。
发布于 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循环中的某些内容很可疑,但您没有在其中提供详细信息。
祝好运。
https://stackoverflow.com/questions/17778061
复制相似问题