0

我正在使用 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]);

}

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

4

1 回答 1

0

在我看来,有三种可能:

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

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

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

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

尝试评论std::swap通话,看看会发生什么。

3:for 循环中的某些东西是可疑的,但您没有在那里提供详细信息。

祝你好运。

于 2013-07-21T23:54:21.857 回答