Я получаю следующее сообщение об ошибке:
Программа получила сигнал SIGSEGV, Ошибка сегментации. 0x08048ff3 в key_deck (key = 0x0) в c1.c: 210 210 для (; * key! = '\ 0'; key ++) {(gdb)
Это мой код:
static void key_deck(
char *key
)
{
int i, kval, *tmp;
state.deck = state.deck1 + 3;
state.spare = state.deck2 + 3;
for (i = 0; i < 52; i++) {
state.deck[i] = i+1;
}
state.deck[state.a = 52] = 53;
state.deck[state.b = 53] = 53;
for (; *key != '\0'; key++) {
if ( *key >= 'A' && *key <= 'Z' ) {
cycle_deck(0); /* Special value '0' is only useful here... */
/* And now perform a second count cut based on the key letter */
kval = *key - 'A' + 1;
for (i = 0; i < 53; i++)
state.spare[i] = state.deck[(i + kval) % 53];
state.spare[53] = state.deck[53];
if (state.a != 53)
state.a = (state.a + 53 - kval) % 53;
if (state.b != 53)
state.b = (state.b + 53 - kval) % 53;
tmp = state.deck;
state.deck = state.spare;
state.spare = tmp;
if (verbose) {
print_deck();
printf(" after %c\n", *key);
}
}
}
/* These are touched by the keying: fix them. */
lastout = 100; cocount = 0;
}
Значит, ошибка находится в строке цикла for
, где происходит итерация ключа - что я здесь не так делаю? Заранее спасибо за любую помощь.