2

私が書いているブラックジャック プログラムのディール関数に問題があります。誰が何が起こっているのか見ることができますか? main() で印刷しようとすると、セグメンテーション違反が発生します。

乾杯。

主な機能

int main(void)
{
    int i, j, k, purse;
    card deck[52];
    card *head_d, *temp_d, *current_d = NULL, *last_d, *head_p, *temp_p, *current_p = NULL, *last_p;



make(deck);  //CREATES THE DECK
shuffle(deck); //SHUFFLES THE DECK
deal(deck, head_d, current_d, head_p, current_p)

for(i = 0; i < DECK_SIZE; i++)
    {
        printf("%d: %d %c\n", i + 1, deck[i].face, deck[i].suit);
    }

temp_p = head_p;
while(temp_p != NULL)
{
printf("%d %c\n", temp_p->face, temp_p->suit);
temp_p = temp_p->listp;
}

return(0);
}

FUNCTION ディール()

  void deal(card x[DECK_SIZE], card *head_d, card *current_d, card *head_p, card *current_p)
    {

    int i;
    card *temp_p, *temp_d;

    for(i = 0; i < 4; i++)
    {
        if( i % 2 == 0)
        {
            temp_p = (card *)malloc(sizeof(card));
            temp_p->face = x[i].face;
            temp_p->suit = x[i].suit;

            if (current_p==NULL)
            {
                head_p=temp_p;
            }
            else
            {
                current_p->listp=temp_p;
            }
                current_p = temp_p;
                temp_p->listp = NULL;

        }
        else
        {
            temp_d=(card *)malloc(sizeof(card));
            temp_d->face = x[i].face;
            temp_d->suit = x[i].suit;

            if (current_d==NULL)
            {
                head_d=temp_d;
            }
            else
            {
                current_d->listp=temp_d;
            }
                current_d = temp_d;
                temp_d->listp = NULL;
        }
    }
}
4

2 に答える 2

2

問題は、deal関数への引数がlocalであることです。つまり、関数で値を変更しても、関数を呼び出すときに使用される変数は変更されません。これらの引数を参照渡しする必要があります:

void deal(card x[DECK_SIZE], card **head_d, card **current_d, card **head_p, card **current_p);

ドエグ

*head_p=temp_p;

関数で変数を設定します。

として呼び出す

deal(deck, &head_d, &current_d, &head_p, &current_p);
于 2012-11-17T08:17:54.760 に答える
0

head_p関数内のポインター変数が初期化されていませんmain。それでも、 が指していると思われるデータを読み込もうとしていますhead_p。もちろん、セグメンテーション違反になります。

于 2012-11-17T08:18:58.907 に答える