定义一个75Kb的全局或者局部数组报错或者无现象,如何解决?(c语言,32)

我想实现读取SD卡bin文件到LCD,于是定义了一个buff【320*240】,也就是75Kb,我的板子103ZET6内存64Kb,把数组定义才全局或者局部产生了以下问题:
1:、buff定义在全局时编译没有问题,打印元素地址就会报错如图

img


猜想求证:buff定义在全局里,存在ram里,因为大于ram内存64Kb,所以系统才报错?那为何编译不打印地址时候时,不报错?
代码:
#include "bsp_usart.h"
#include "stdio.h"
u8 buff[76800] = {0,1,2};
int main(void)
{
LED_Config();
Delay_Config();
USART_Config();
printf("buff[] = %d\r\n",sizeof(buff));
// printf("地址buff[0] = %p\r\n",(&buff[0]));
printf("地址buff[1] = %p\r\n",(&buff[1]));
// printf("地址buff[2] = %p\r\n",(&buff[2]));
while(1)
{ //灯
PBout(1) = 1;
Delay_ms(500);
PBout(1) = 0;
Delay_ms(500);
}
}

2、我把buff定义才main内部,编译没有问题,运行时候为什么代码会卡在定义buff那行过不去?
代码:#include "bsp_usart.h"
#include "stdio.h"

int main(void)
{
u8 buff[76800] = {0,1,2};
LED_Config();
Delay_Config();
USART_Config();
printf("buff[] = %d\r\n",sizeof(buff));
printf("地址buff[0] = %p\r\n",(&buff[0]));
printf("地址buff[1] = %p\r\n",(&buff[1]));
printf("地址buff[2] = %p\r\n",(&buff[2]));
while(1)
{ //灯
PBout(1) = 1;
Delay_ms(500);
PBout(1) = 0;
Delay_ms(500);
}
}

诚心请教,谢谢啦!

1,内存越界,后果无法预料,可能是你说的前一种情况下,还没有访问到越界的部分而已,但不同编译器可能有不同的内存分配方式,换个编译器可能又是另外的结果。
2,定义在main内部就是局部变量了,局部变量占用的是栈,定义变量的语句不是执行语句,只是进main的时候发生了栈溢出,所以停在了main的入口。

64kb 的RAM里无法定义超过总容量大小的变量空间, 没有用到的空间,编译器会将其优化过滤掉,
放在栈区只有在使用的时候挂掉也很好理解,无非是进入函数PC指针进行加减计算后越界了,指向了不可访问空间,自然就崩掉了。