【发布时间】:2014-12-28 17:53:06
【问题描述】:
如果堆上没有剩余内存,malloc 将返回 NULL。
堆栈溢出的行为是否在 C 中定义?
Wikipedia 暗示它可能会导致段错误,至少在无限递归的情况下,但会发生其他事情吗?
同样在许多托管环境中,运行时不允许您在堆栈上创建数组。这是否意味着我们也应该在本机代码中避免它以防止堆栈溢出,至少在运行时确定数组的大小时?
【问题讨论】:
-
C 规范确实提到了“堆栈”或“堆”。因此,未指定堆或堆栈上的空间不足。
-
@JoachimPileborg 但是规范说
malloc()如果无法分配,可以返回NULL。如果您用完malloc()使用的任何内存(我们可以选择将其称为“堆”),这就是预期的结果。这个问题的重点是,无法为函数中的局部变量分配内存没有什么类似的。 -
任何环境都不可能禁止在栈上创建数组。数组和非数组变量只是内存,环境无法知道内存将如何使用。
-
@Barmar 是的,我知道。我的问题是这是否是一个坏主意
-
只要将局部变量保持在合理的大小(每个函数调用几 KB),就可以了。
标签: c stack-overflow