
在函数中声明较大的局部数组变量时,可以编译并传递该程序,但是在运行时,该程序始终会进入hardfaulthandler,导致问题的原因可能是堆栈溢出. 因为局部变量存储在堆栈区域中,而全局变量存储在全局区域(静态区域)中,所以如果堆栈区域较小,则会发生溢出.
解决此问题的方法:
方法1: 启动文件中的堆栈大小有一个固定值. 调用函数时,函数中的数组会为您分配空间. 增加启动文件下堆栈的大小

Stack_Size EQU 0x00000400.
堆栈大小,通常对于小型项目,0X400就足够了,对于大型项目栈溢出了,0X1000就足够了,因此默认情况下无需设置得太大.
方法2: 使用静态数组代替普通的本地数组.


方法3: 数组太大,堆栈溢出,它可能会覆盖其他全局变量的值. 如果使用非常大的数组,则可以将其定义为全局变量. 如果您使用的是os. 只需使用内存管理即可.
堆是在程序运行时申请一定大小的内存空间,而不是在编译程序时申请. 也就是说栈溢出了,内存是动态分配的,对其的访问与对常规内存的访问没有区别. {堆是指程序运行时申请的动态内存,而堆栈是指使用堆的方法(即先进先出). }

堆栈是先进先出的,但是堆栈没有此功能. 两者都是用于存储临时数据的地方. 对于堆,我们可以根据需要添加变量和删除变量,无论大小,只要您愿意,就不必遵循任何顺序
*堆栈,用于存储局部变量,局部数组等.
*堆,用于保存自定义内存变量,例如new和malloc;

*全局静态区域用于保存全局变量和静态变量;
*字符常量区,用于保存字符串;
*代码区,用于保存程序的二进制代码;
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-288788-1.html
卸了重下很累的