У меня есть следующий код:strdup() вызывает EXC_BAD_ACCESS
char *passwordFunc(const char *s)
{
static char *pw = NULL;
if (strlen(s)) {
pw = s;
}
return pw;
}
void keyboard_interactive(const char *name, int name_len, const char *instr, int instr_len,
int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE *res,
void **abstract)
{
char *text = passwordFunc("");
res[0].text = strdup(text);
res[0].length = strlen(text);
}
Согласно отладчика, каждый раз, когда он попадает в линию с strdup(text)
, он падает с EXC_BAD_ACCESS (code=2, address=0x0)
.
Любые предложения относительно того, что происходит и как его исправить? Заранее спасибо.
Какова цель вашего 'passwordFunc' функции? Для любой непустой строки она возвращает свой аргумент; для пустой строки он возвращает нулевой указатель. Это не кажется полезным. Что делать, если вы просто просто отключите функцию passwordFunc и измените первое объявление в 'keyboard_interactive' на' char * text = ""; '? –
Является ли 'res' действительным указателем для записи? –
Как я могу проверить это? 'keyboard_interactive' является обратным вызовом libssh2, поэтому я не понимаю, почему это было бы неверно. –