|
发表于 2019-8-3 16:14:14
|
显示全部楼层
char szPath[MAX_PATH + 1] // 这是栈内存,由编译器释放,也就是离开了函数编译器就已经释放了,返回的是“野指针”;
解决方案一,返回类对象,由类对象管理内存:
- std::string GetFilePath(DWORD dwProcessId)
- {
- //DWORD dwProcessId = 3344;
- HANDLE hProcess = NULL;
- BOOL bSuccess = FALSE;
- hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ , FALSE, dwProcessId );
- char szPath[MAX_PATH + 1] = {0};
- HMODULE hMod = NULL;
- DWORD cbNeeded = 0;
- if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
- {
- GetModuleFileNameEx( hProcess, hMod, szPath, MAX_PATH );
- }
- return std::string(szPath);
- }
复制代码
解决方案二,返回堆内存,由程序员释放内存:
- char * GetFilePath(DWORD dwProcessId)
- {
- //DWORD dwProcessId = 3344;
- HANDLE hProcess = NULL;
- BOOL bSuccess = FALSE;
- hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ , FALSE, dwProcessId );
- //char szPath[MAX_PATH + 1] = {0};
- char *szPath = new char[MAX_PATH + 1];
- HMODULE hMod = NULL;
- DWORD cbNeeded = 0;
- if( EnumProcessModules( hProcess, &hMod, sizeof( hMod ), &cbNeeded ) )
- {
- GetModuleFileNameEx( hProcess, hMod, szPath, MAX_PATH );
- }
- return szPath;
- }
- /*
- * 使用完后必须调用delete []szPath;
- *
- * char* path = GetFilePath(xx);
- * delete []path;
- */
复制代码 |
评分
-
查看全部评分
|