C – Honestamente perdido por este extraño comportamiento

Entonces … tengo un pequeño código en el que he estado trabajando durante la mayor parte de la mañana. Es solo un pequeño proyecto para ayudarme a recordar la syntax y así sucesivamente. Obviamente me he perdido algún tipo de error masivo ya que el código devuelve un error de segmentación por razones que no entiendo.

#include  #include  #include  #include  #include  struct cards { int card_value[99]; char card_name[99]; char card_suit[99]; int card_tally; }; struct cards hand[2]; void tally (int a) { int k, j; for (k=0; k5; d++) { if (hand[a].card_name[d] =='A') { int y; int z = 10; for (y=0; y<5; y++) z = z + hand[a].card_value[y]; if (z  1) && (z < 10)) { hand[a].card_value[x]=z; hand[a].card_name[x]=((char) '0' + z); } else if (z == 10) { hand[a].card_value[x]=z; hand[a].card_name[x]='T'; } else if (z == 11) { hand[a].card_value[x]=10; hand[a].card_name[x]='J'; } else if (z == 12) { hand[a].card_value[x]=10; hand[a].card_name[x]='Q'; } else if (z == 13) { hand[a].card_value[x]=10; hand[a].card_name[x]='K'; } else if (z == 1) { /*Function 'check_for_ace' deals with this more properly*/ hand[a].card_value[x]=1; hand[a].card_name[x]='A'; } check_for_ace(a); tally(a); } void display_hands () { int x; printf("\nDealer's Hand Shows: "); for (x=0; hand[0].card_name[x]!=0; x++) { printf("%c ", hand[0].card_name[x]); } printf("\nPlayer's Hand Shows: "); for (x=0; hand[1].card_name[x]!=0; x++) { printf("%c ", hand[1].card_name[x]); } } void dealer_turn() { while (hand[0].card_tally < 17) draw_card(0); } void player_turn() { int op=0; while (op != 2) { printf("What would you like to do?\n"); printf("(1)it or (2)tand\n"); scanf("%d", &op); if (op == 1) draw_card(1); } } int main(int argc, char **argv) { srand(time(NULL)); draw_card(0); draw_card(1); draw_card(1); display_hands(); player_turn(); dealer_turn(); display_hands(); return 0; } 

Ahora, lo realmente extraño es ver esa línea vacía entre player_turn y dealer_turn? Si pongo un display_hands allí, el código se ejecuta sin error.

¿Algunas ideas?

Además, me doy cuenta de que usé encabezados que no necesito. Planeo usarlos más tarde y los dejé para esta publicación para que hubiera dejado todo exactamente como está con el error.

No está inicializando j antes de ejecutar esta línea.

  j = j + hand[a].card_value[k]; 

Cuando agregué una inicialización j=0 a su código, ya no se bloquea.

P.ej

 void tally (int a) { int k, j; j=0; /* <----- added this line */ for (k=0; k<5; k++) { j = j + hand[a].card_value[k]; } hand[a].card_tally = j; }