0

重複の可能性:
ローカル変数のメモリにそのスコープ外でアクセスできますか?
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() 内のこの変数 i は、どのメモリ セグメントに格納されますか? または、関数のすべてのローカル変数はどこに格納されますか?
  2. 別の関数からこれにアクセスするにはどうすればよいですか?
4

1 に答える 1

2

にアクセスするときに、未定義の動作を呼び出してい*pますfoo1()。次のような関数を追加した場合:

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

と の呼び出しの間に呼び出すfoo()foo1()、おそらく異なる出力が得られます。それは保証されていません。未定義の動作に関する興味深い点の 1 つは、何でも起こり得ることであり、苦情の根拠がないことです。

于 2012-07-25T06:29:59.513 に答える