関数では、パラメーターが最初に配置された後に定義されるため、ローカル変数がスタックに配置されることを読みました。
こちらにも記載されています
5 .すべての関数引数がスタックに置かれます。6. 関数内の命令が実行を開始します。7.ローカル変数は、定義されるとスタックにプッシュされます。
したがって、C++ コードが次のようになっている場合は、次のようになると思います。
#include "stdafx.h"
#include <iostream>
int main()
{
int a = 555;
int b = 666;
int *p = &a;
std::cout << *(p+1);
return 0;
}
int
555
ここで integer に 4 バイトがあり、 xの最初の 8 ビットを含むスタック上のメモリ空間を呼び出すと、アドレスx + 4*(p+1)
のメモリを調べる必要があります。
ただし、これの出力は、-858993460
値に関係なく、常にそのようなものですint b
。明らかにそのいくつかの標準値。もちろん、これは変数 b であるため、アクセスしてはならないメモリにアクセスしています。それはただの実験でした。
期待値が得られず、不正アクセスエラーになるのはなぜですか?
私の仮定はどこが間違っていますか?
何を-858993460
表すことができますか?