C언어 동적할당을 이용한 빙고에 오류가 생깁니다.

eunjong147의 이미지

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int i,j;
 
void print(int **A, int a)
{
    for(i=0;i<a;i++)
    {
        for(j=0;j<a;j++)
        {
            if(A[i][j]==0)
            {
                printf("%5c",'*');
                continue;
            }
            printf("%5d", A[i][j]);
        }
        printf("\n\n\n");
    }
}
 
void pos(int **A, int a)
{
    int K=1;
    while(1)
    {
        i=rand()%a;
        j=rand()%a;
        if(A[i][j]==0)
        {
            A[i][j]=K++;
        }
        if(K==(a*a))
            break;
    }
}
 
void check(int **A,int **B,int a, int b)
{
    for(i=0;i<b;i++)
    {
        for(j=0;j<b;j++)
        {
            if(A[i][j]==a)
                A[i][j]=0;
            if(B[i][j]==a)
                B[i][j]=0;
        }
    }
}
 
int victory(int **A,int v, int d)
{
    int x=0,z=0,a=0,b=0,c;
 
    c=d-1;
    v=0;
    for(i=0;i<d;i++)
    {
        for(j=0;j<d;j++)
        {
            if(A[i][j]==0)
                x++;
            if(A[j][i]==0)
                z++;
            if(x==5)
                v++;
            if(z==5)
                v++;
        }
        x=0,z=0;
        if(A[i][i]==0)
            a++;
        if(A[i][c--]==0)
            b++;
    }
    if(a==d)
        v++;
    if(b==d)
        v++;
 
    return v;
}
 
int main(void)
{
    int v,a,b,c;
    int ** A = (int **)malloc(sizeof(int*)*3);
    int ** B = (int **)malloc(sizeof(int*)*3);
    printf("빙고판 크기: ");
    scanf("%d", &c);
    A = (int **)realloc(A, sizeof(int*)*c);
    B = (int **)realloc(B, sizeof(int*)*c);
    for(b=0;b<a;b++)
    {
        A[b] = (int *)malloc(sizeof(int)*c);
        B[b] = (int *)malloc(sizeof(int)*c);
    }
    srand((unsigned)time(NULL));
    pos(A,c);
    pos(B,c);
 
    while(1)
    {
        print(A,c);
        printf("Your turn : ");
        scanf("%d", &a);
        check(A,B,a,c);
        a=rand()%25+1;
        printf("COM's turn : %d \n", a);
        check(A,B,a,c);
 
        v=victory(A,v,c);
        if(v>=3)
        {
           printf("you win");
           break;
        }
        v=victory(B,v,c);
        if(v>=3)
        {
           printf("COM win");
           break;
        }
        printf("--------------------------------------------------\n");
    }
    return 0;
}