0
次のCコードがなぜ機能するのか分かりません( '53'をプリントします)。私はint aがスタックに置かれ、foo()が終了するとすぐに消去されると考えました。コンパイラが代わりにをのヒープに配置している場合は、それを知らない方法がありますか?コンパイラがメモリをヒープに配置していますか?
#include "stdio.h"
int * foo()
{
int a = 53;
int * b = &a;
return b;
}
int main(void)
{
int * c = foo();
printf("%d\n",*c);
return 0;
}
これはまさに何が起こるかです。このプログラムには未定義の動作があります。 – Jon
あなたはただ運がいいですか? 'a' aka' b'がスタックにあった - 今あなたは未定義の振る舞いの世界に住んでいる。 –
別の関数を呼び出す必要がある。あなたのスタックポインタは何か他のものでそれを上書きする理由がありませんでした。 – jiveturkey