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

私の見方では、3つの可能性があります。

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 に答える