2013-07-21 108 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循環內部有些東西是可疑的,但您不提供細節。

祝你好運。