c - 局部变量和全局变量

标签 c function

当我运行我的程序时出现错误:

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/

相关文章:

c - 转义的多字符常量警告\t

c - 像 "void foo(int *const *p) "这样的东西真的存在吗?

c - "execv"子进程存在与终止

ruby - 定义一个 `module_function` 然后覆盖相同的方法 : how many methods exist?

javascript - 为什么 '(function a() {})'不把 'a'放到全局对象中呢?

c - 这个 openGL 代码是如何工作的,将函数作为参数而不是函数指针传递?

c - 类型转换实际上有什么作用吗?

c - 如何在 C 中使用 LR 解析器计算表达式结果

function - 如何创建一个为该语言添加新函数的处理库?

python,动态实现一个类onthefly