我正在使用C开发一个用于ARM处理器的程序,在我的程序中,当我的内存使用量增加时(当程序流经其中已定义数组的函数时)程序出乎意料地行为,我认为一些变量被覆盖,就是当它耗尽内存时,它开始从头开始分配内存。
现在我的问题是:是否覆盖旧变量时缺少内存所需的行为?如果是,我该如何避免这种情况?
我正在使用Keil uVision和lpc 1768。
感谢您的帮助。
答案 0 :(得分:0)
是的,你是对的。当堆栈内存已满时,它开始从底部地址(0x00..0)填充它。这会导致旧的变量被覆盖,程序会出现意外行为。 解决方案:解决此问题的最简单方法是永远不要直接定义数组,而是使用malloc或calloc来尽快分配内存并释放内存。这可以防止内存被覆盖。这也是一种很好的做法。
答案 1 :(得分:0)
1)是。由于缺乏记忆而发生了旧的变量 2)为避免这种情况尝试最小化阵列大小,或者可以增加堆栈大小。在Keil uVision中,可以选择增加堆栈大小。这可以解决您的问题