C中局部变量的内存分配

时间:2012-07-25 06:22:27

标签: c memory-management

  

可能重复:
  Can a local variable's memory be accessed outside its scope?
  Scope vs life of variable in C

int *p;

void foo()
{
    int i = 5;
    p = &i;
}

void foo1()
{
    printf("%d\n", *p);
}

int main()
{
   foo();
   foo1();
   return 0;
}

输出:5(foo1()打印i的值)

注意:我在Linux上运行此程序

据我所知,局部自变量的范围仅限于块/函数的寿命。

  1. 在foo()中这个变量的内存段是什么?或函数的所有局部变量在哪里获得商店?
  2. 如何从其他功能访问此内容?

1 个答案:

答案 0 :(得分:2)

*p访问foo1()时,您正在调用未定义的行为。 如果添加了这样的函数:

void do_very_little(void)
{
    char buffer[] = "abcdef";
    puts(buffer);
}

并在调用foo()foo1()之间调用它,您可能会获得不同的输出。这没有保证;关于未定义行为的一个有趣的事情是任何事情都可能发生,你没有理由抱怨。