お世話になります。現在、C言語を勉強中なのですが以下のプログラムでわからないことがあります。

#include <stdio.h>

#define MATHMAX 1000

typedef struct{
char mathbox[MATHMAX][MATHMAX];
} MATH;


int matharr(MATH *math){
long int roop1, roop2;

for(roop1=0;roop1<MATHMAX;roop1++){
for(roop2=0;roop2<MATHMAX;roop2++){
math->mathbox[roop1][roop2]=1;
}
}
return 0;
}


int main( void){
MATH math;
matharr(&math);
return 0;
}


現在、構造体の勉強中なのですが、これは間違っていますでしょうか?
MATHMAXの値を大きくすると、セグメンテーションフォルトになってしまいます。