-1

次のコードでメモリリークが発生しています。メモリを一度割り当てて、使用後に削除しています。ここでメモリリークを引き起こしている舞台裏で何が起こっているのか、誰か説明できますか? Visual Studio は、このステートメントにリークがあると言っています。これらのステートメントを削除すると、リークはなくなります。

wxProcess *tmpProcess = new wxProcess();
tmpProcess->Redirect();
wxExecute(CmdToExecute, wxEXEC_SYNC, tmpProcess);           
wxExecute(CmdToExecute, wxEXEC_SYNC, tmpProcess);
delete tmpProcess;

私はそれを次のように変更しましたが、メモリがスタックに割り当てられるので問題ありません。

wxProcess tmpProcess1, tmpProcess2;
tmpProcess1.Redirect();
tmpProcess2.Redirect();
wxExecute(CmdToExecute, wxEXEC_SYNC, &tmpProcess1);
wxExecute(CmdToExecute, wxEXEC_SYNC, &tmpProcess2);

それでも、最初のコードの問題を理解したいと思います。どのコードが優れているかについての洞察も同様に役立ちます。

4

1 に答える 1

0

コードは正常に見えますが、メモリ リークまたは単にメモリ使用量の増加があると確信していますか? リークの場合は、wxProcess のデストラクタを調べる必要があります。割り当てられたすべてのメモリが解放されていない可能性があります。また、wxExecute が何らかの例外をスローし、コードの削除部分に到達しない可能性もあります。

これらを回避するには、ヒープにメモリを割り当てるときに RAII イディオムを使用することを常にお勧めします。

std::unique_ptr<wxProcess> tmpProcess(new wxProcess());
于 2013-09-06T05:21:08.993 に答える