C中的堆栈溢出

时间:2014-11-01 16:07:29

标签: c stack-overflow

如果堆上没有剩余内存,malloc将返回NULL。

堆栈上的行为是否在C?

中定义溢出

Wikipedia表明它可能会导致段错误,至少在无限递归的情况下,但可能会发生其他事情?

此外,在许多托管环境中,运行时不允许您在堆栈上创建阵列。这是否意味着我们应该在本机代码中避免它以防止堆栈溢出,至少在运行时确定数组的大小?

2 个答案:

答案 0 :(得分:2)

当您有堆栈溢出时,您正在写入未分配的内存。 在未分配的内存中写入的行为是未定义的,但它可能会使您的程序崩溃。

答案 1 :(得分:2)

  

这是否意味着我们应该在本机代码中避免它以防止它   堆栈溢出,至少在确定数组的大小时   运行时间?

你为什么要避免它?我不会避免它,因为一个好处 堆栈声明的数组与动态数据相比是那样的 你不必担心内存管理问题(例如,不需要free)。这是一大优点。

在极少数情况下,如果您想要的阵列太大而且不适合堆叠, 你可以使用动态数组。对于堆栈大小也有一些估计,在Windows上,例如在Visual Studio中,默认堆栈大小为1MB。你可以考虑这个。这个尺寸 如果我没有错,也可以增加。