получить ошибку в коде c - PullRequest
1 голос
/ 25 апреля 2011

Я получаю следующее сообщение об ошибке:

Программа получила сигнал 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, где происходит итерация ключа - что я здесь не так делаю? Заранее спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 25 апреля 2011

Вы вызываете свою функцию с указателем NULL в качестве параметра.Вы можете увидеть это в полученном сообщении об ошибке:

... in key_deck (key=0x0) ...
1 голос
/ 25 апреля 2011

В сообщении об ошибке вы видите, что вы передаете NULL функции

key_deck(key=0x0)

Ошибка на самом деле в вызывающей стороне.

...