当我运行我的程序时出现错误:
Segmentation fault
这是代码:
#include <stdio.h>
void
add (int sum)
{
int count = 1;
sum = sum + count;
count++;
if (count <= 4)
{
add (sum);
}
else
{
printf ("sum=%d\n", sum);
}
}
int
main ()
{
int sum = 0;
add (sum);
return 0;
}
当我将 count
从局部变量更改为全局变量时,程序可以运行。为什么在函数 add
中将变量 count
初始化为局部变量时程序无法运行?
最佳答案
如果count
是一个全局变量,只有在程序运行时才会初始化为1。
如果 count
是局部变量,而不是 static
,则每次输入 add()
时都会将其初始化为 1。为了防止这种情况,将其声明为
static int count = 1;
其他答案没有告诉您的是您遇到段错误
的原因。这样做的原因是,如果您始终将 count
初始化为 1,它将始终从 add()
中调用 add()
。每次执行此操作都会用尽堆栈空间,直到堆栈耗尽并尝试覆盖堆栈之外的任何内容。 这就是给您带来段错误的原因。从技术上讲,这称为 Stack Overflow,因此是该站点的名称。
关于c - 局部变量和全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22259829/