异常问题:Windows 已在 XXXX.exe 中触发一个断点
以下代码:查找需要终止的进程的handle,并终止,但是出现以下异常,网上找到信息说CString需要释放,但是调用了szProcessName.ReleaseBuffer()还是同样的异常 Windows 已在 XXXX.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 XXXX.exe 中或它所加载的任何 DLL 中有 Bug。
void FindProcess(CString strProcessName){ DWORD aProcesses[100], cbNeeded, cbMNeeded;//aProcesses为进程ID数组 HMODULE hMods[100]; //HMODULE* hMods; HANDLE hProcess; //char szProcessName[MAX_PATH]; CString szProcessName; //AfxMessageBox(_T("OK!!!")); if ( !EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded) ) return; for(int i=0; i< (int) (cbNeeded / sizeof(DWORD)); i++) { //_tprintf(_T("%d/t"), aProcesses[i]); hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i]); if ( hProcess != NULL ){ EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbMNeeded); LPWSTR tempStr = szProcessName.GetBuffer(); GetModuleFileNameEx( hProcess, hMods[0], tempStr, 100); //GetShortPathName(szProcessName,szProcessName.GetBuffer(),256); //AfxMessageBox(szProcessName); //if(strstr(szProcessName, strProcessName)) if(szProcessName == strProcessName) { //TerminateProcess(hProcess, 0); AfxMessageBox(szProcessName); szProcessName.ReleaseBuffer(); TerminateProcess(hProcess, 0); //break; CloseHandle(hProcess); return; //return aProcesses[i]; //其原因可能是堆被损坏,这说明GYKF.exe 中或它所加载的任何DLL 中有Bug } szProcessName.ReleaseBuffer(); } } CloseHandle(hProcess); //return 0;}