下記でアクセス違反が発生するのですが、なぜでしょうか?

#define ROWS 65536
#define COLS 32768

int main( int argc, char *argv[] )
{
try{
int (*spread)[COLS] = new int [ROWS][COLS];
cout << "new success" << endl;
for(int r = 0;r < ROWS;++r){
for(int c = 0;c < COLS;++c){
spread[r][c] = r * c;
}
}
}catch(std::bad_alloc){
cout << "std::bad_alloc" << endl;
}
cout << "end" << endl;
return 0;
}