変数をスタック上で間接的に操作する方法を示す簡単なプログラムを作成しようとしています。以下のコードでは、すべてが計画どおりに機能します。a のアドレスが渡されても、c の値を間接的に変更できます。ただし、コードの最後の行 (または最後の 3 行のいずれか) を削除すると、これは適用されなくなります。これらの行は、何らかの形でコンパイラに 3 つの変数を順番にスタックに入れるように強制しますか? 私の期待は、常にそうであるということでした。
#include <iostream>
using namespace std;
void someFunction(int* intPtr)
{
// write some code to break main's critical output
int* cptr = intPtr - 2;
*cptr = 0;
}
int main()
{
int a = 1;
int b = 2;
int c = 3;
someFunction(&a);
cout << a << endl;
cout << b << endl;
cout << "Critical value is (must be 3): " << c << endl;
cout << &a << endl;
cout << &b << endl;
cout << &c << endl; //when commented out, critical value is 3
}