我正在上课,一位非常有经验的老师告诉我,当 STACK memory 被程序完全填满时,以下代码将终止。现在我不明白为什么?以下是源代码:-

#include<stdio.h>

int main()
{
char i;
for (i = 120; i < 130; i++)
    printf("\n%d", i);

return 0;
}

现在,我觉得这个循环不会终止的原因是因为一旦程序运行,变量被声明在一个内存位置,直到程序生命周期才改变,我们只更改已经声明的变量的值。所以,我想问这个问题的答案。另外,如果你认为老师是对的,也请解释一下:)

另外,我尝试了很长时间运行该程序,但内存消耗并没有增加一点点:|

最佳答案

程序的操作取决于您的实现如何定义 char : it may be a signed or an unsigned type

如果它是无符号的,则输出 10 个数字并终止。

如果它是有符号的,它将在 127 处换行,下一个值是 -128 - 在大多数实现中。但根据标准,这是未定义的行为。

我不明白为什么它应该吃掉整个堆栈 - 没有递归,也没有额外的内存分配,所以



表示“从不” - 因为它只是没有填满堆栈。不可能是这么有经验的程序员/老师——或者 OP 不是一个有经验的听众,并且误解了老师告诉他的东西。

关于c - 这个循环会无限运行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21182833/

10-15 13:56