重複の可能性:
ローカル変数のメモリにそのスコープ外でアクセスできますか?
2番目の問題は何printf
ですか?
#include<stdio.h>
int* fun() {
int a =10;
return &a;
}
int main() {
int *a;
a = fun();
printf("%d",*a);
printf("%d",*a);
return 0;
}
ローカル変数のアドレスを返し、それをに渡しましたprintf
。1回目は「10」として正しく印刷されますが、2回目はジャンク値が表示されます。
最初a
にのアドレスを指すダングリングポインタだった場合10
、なぜ2回目ではないのですか?
誰かがこれを説明できますか?
printf
初めて呼び出す前に他の関数を呼び出そうとしましたが、それでも同じ出力が得られます。
BeniBelaの答えの後、私はこれを試してみました。
#include<stdio.h>
int* fun()
{
int a =10;
return &a;
}
void fun2(int d)
{
int a,b,c;
}
int main()
{
int *a,b;
a = fun();
fun2(5);
printf("%d",*a);
printf("%d",*a);
return 0;
}
まだ同じ出力..:(