Язык СИ. Проблема с кодом. Аварийная остановка

Добрый день, подскажите что не так с кодом. ничего не вывод и пишет что “Аварийный остановка стек памяти сброшен на диск”.

#include <stdio.h>
#include <stdio.h>
 
int function (int a[][N], int first)
{
    int i, k, max;
    for (i=0; i<N; i++)
        for (k=0; k<N; k++)
            if (i == k)
                if (first || a[i][k] > max) max = a[i][k], first = 0;
    return max;
}
 
int main (void)
{
    int i, k, a[2][2];
    
   for ( int i = 0; i < 10; i ++){  
        for ( int j = 0; j <10; j ++)      
            Arr [i][j] = rand ()%100;}
 
    for (i=0; i<N; i++)
    {
        for (k=0; k<N; k++)
            printf("% 4d", a[i][k]);
        printf("\n");}
    printf("\nMax = %d\n", function(a, 1));
    return 0;
}

Видимо что-то не так при работе с памятью, типа попытки обращения к элементу за пределами указанного размера массива.