为什么这段代码会泄漏内存?

时间:2013-09-06 04:27:22

标签: c++ memory-leaks

我在下面的代码中遇到内存泄漏。我正在分配内存一次并在使用后删除它。任何人都可以解释这里导致内存泄漏的幕后情况吗? 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);

但我还是想了解第一段代码中的问题。任何有关哪些代码更好的见解也会很有用。

1 个答案:

答案 0 :(得分:0)

代码似乎没问题,您确定存在内存泄漏或仅增加内存使用量吗?如果它是泄漏,那么我们将不得不查看wxProcess的析构函数,可能是它没有释放它分配的所有内存。 wxExecute也可能抛出一些异常而不是代码的删除部分。

为了避免这些,在堆中分配内存时使用RAII习惯是一个好主意。

std::unique_ptr<wxProcess> tmpProcess(new wxProcess());