-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 回答