C++ 这个程序会泄漏内存吗?

C++ 这个程序会泄漏内存吗?,c++,windows,C++,Windows,由于返回进程id的新用法?通过调试我的应用程序,我如何检查内存何时开始泄漏?(解释部分的长度检查非常糟糕=P) 这是泄漏: PROCESSENTRY32 *pe32 = new PROCESSENTRY32(); 更好地使用: PROCESSENTRY32 pe32 = {0}; pe32.dwSize = sizeof( PROCESSENTRY32 ); //Process32First( hSnapshot, pe32 ); while( Process32Next( hSnapshot

由于返回进程id的新用法?通过调试我的应用程序,我如何检查内存何时开始泄漏?(解释部分的长度检查非常糟糕=P)

这是泄漏:

PROCESSENTRY32 *pe32 = new PROCESSENTRY32();
更好地使用:

PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof( PROCESSENTRY32 );
//Process32First( hSnapshot, pe32 );
while( Process32Next( hSnapshot, &pe32 ) )
...

另外,您没有关闭在
GetProcessHandle
上创建的句柄,这也是一个漏洞。

是的,您是对的。在不释放内存的情况下分配内存,就像您的程序那样,会造成内存泄漏


您可以使用一个工具来查找程序中的漏洞。

Valgrind是一个很好的工具,可以告诉您内存泄漏的情况。如果您使用调试符号(-g代表GCC)进行编译,它甚至会告诉您泄漏发生在哪一行


返回pe32.th32ProcessID不会有问题吗?我想我研究了返回堆栈上的结构对象会导致未定义的行为。
th32ProcessID
是一个
DWORD
,也就是一个无符号的long。你通过值返回它,所以这绝对没有问题。如果返回对堆栈上的变量的引用并超出范围,则会出现UD问题。哦,是的,关于CloseHandle(hProcess),我没有注意到,谢谢!不幸的是,Windows不是Valgrind的平台。然而,它是一个受支持的平台。
PROCESSENTRY32 *pe32 = new PROCESSENTRY32();
PROCESSENTRY32 pe32 = {0};
pe32.dwSize = sizeof( PROCESSENTRY32 );
//Process32First( hSnapshot, pe32 );
while( Process32Next( hSnapshot, &pe32 ) )
...