неверный параметр cruntime _itoa_s - PullRequest
2 голосов
/ 12 августа 2010

Я столкнулся со странным поведением при использовании _itoa_s и _ultoa_s, если я пытаюсь получить массив символов из DWORD. Функция возвращает ноль (успех), и мое приложение продолжается, но я получаю окно исключения с кодом ошибки 0xc0000417 (STATUS_INVALID_CRUNTIME_PARAMETER).

ULONG pid = ProcessHandleToId(hProcess);  
int size = getIntSize(pid);  
char *pidStr = new char[size+1];  
_ultoa_s(pid, pidStr, size+1, 10);  
//do sth with pidStr...
delete[] (pidStr);`   

ProcessHandleToId возвращает PID (DWORD) для данного ProcessHandle.

getIntSize возвращает число чисел в соответствующий массив int/char (5555 => 4).

Ответы [ 2 ]

2 голосов
/ 12 августа 2010

Да, безопасные функции CRT прервут вашу программу с кодом состояния 0xc0000417 при обнаружении проблемы. Однако, они сделают это немедленно , функция не вернет.

Это означает, что вы ищете неправильный исходный код для этой проблемы. Это не вызов _ultoa_s (), который бомбит вашу программу. Это еще один вызов функции, где-то еще в вашем коде. Я не могу помочь вам найти это, конечно. Но отладчик должен дать вам хорошую идею, посмотрите на стек вызовов, когда он прерывается.

0 голосов
/ 12 августа 2010

Я только что скомпилировал ваш код, и он работает нормально.Преобразование int в строку является правильным.Я предполагаю, что вы сталкиваетесь с проблемами безопасности из-за отсутствия разрешения при попытке доступа к дескрипторам процесса, которые вам не принадлежат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...