这个最大公约数的代码哪里有问题?

#include <stdio.h>

#include <stdio.h>
int main()
{
    int i=0,j=0,k=0,m=0;
    int sum[]={0};
    int arr[]={0};
    int a=0,b=0;
    scanf("%d%d",&a,&b);
    for(i=1;i<=a;i++)
    {
        if(a%i==0)
        {
            sum[j]=i;
            j++;
        }
    }
    for(k=0;k<=j;k++)
    {
        if(b%sum[k]==0)
        {
            arr[m]=sum[k];
            m++;
        }
    }
    printf("%d\n",arr[m]);
    return 0;
}

m表示有多少个公约数,最大公约数是最后一个,下标是m-1,不是m。m的话就越界访问了
printf("%d\n",arr[m-1]);

首先在a,b里面找一个最小值出来,然后用最小值进行循环,取模都为0就终止循环。