Мне нужно было перечислить запущенные процессы и некоторое время удивлялся, почему мой код не работает:
PROCESSENTRY32 ProcEntry;
ZeroMemory (&ProcEntry, sizeof (PROCESSENTRY32)); //problem
ProcEntry.dwFlags = sizeof(PROCESSENTRY32);
HANDLE Snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (Snapshot == INVALID_HANDLE_VALUE)
return false;
if (Process32First(Snapshot, &ProcEntry))
....
Проблема заключалась в том, что Process32First всегда возвращал FALSE из-за ошибки ERROR_BAD_LENGTH.
После удаления строки ZeroMemory все стало работать нормально.Итак, вопрос в том, почему ZeroMemory вызвал это?Он должен просто заполнить память по адресу X для Z байтов.Я часто использую его для структур, похожих на указатели winapi, на этот раз я не понял, что это локальная переменная, но это не объясняет проблему или нет?
Спасибо,
Кра
РЕДАКТИРОВАТЬ: плюс я обнаружил, что код отлично работает только в версии отладки, как только я скомпилировал его как версию выпуска, он снова прослушивается: /