1

我正在用 C 为 ARM 处理器开发一个程序,在我的程序中,当我的内存使用量增加时(当程序流经其中定义了数组的函数时),程序的行为出乎意料,我认为某些变量被覆盖,即它耗尽内存它从头开始分配内存。

现在我的问题是:覆盖旧变量是否是内存不足时的行为?如果是,我该如何避免这种情况?

我正在使用 Keil uVision 和 lpc 1768。

感谢您的帮助。

4

2 回答 2

0

你是对的。当堆栈内存已满时,它会从底部地址(0x00..0)开始填充它。这会导致旧变量被覆盖并且程序出现意外行为。解决方案:解决这个问题最简单的方法是永远不要直接定义数组,而是使用 malloc 或 calloc 分配内存并尽快释放内存。这可以防止内存被覆盖。这也是一种很好的做法。

于 2013-06-28T08:24:17.937 回答
0

1)是的。由于内存不足,会发生过度写入旧变量 2)为了避免这种情况,请尝试最小化数组大小,或者您可以增加堆栈大小。在 Keil uVision 中有增加堆栈大小的选项。这可能会解决您的问题

于 2013-06-28T09:18:20.580 回答