我正在尝试编写一个简单的程序来展示如何在堆栈上间接操作变量.在下面的代码中,一切都按计划工作:即使a的地址被传入,我也可以间接地改变c的值.但是,如果我删除最后一行代码(或最后三行代码),则不再适用.这些行是否以某种方式迫使编译器将我的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
}
Run Code Online (Sandbox Code Playgroud)
您的代码导致未定义的行为.你不能将指针传递给a int然后只是从它中减去任意数量并期望它指向一些有意义的东西.编译器可以按照自己喜欢的顺序放置a,b以及c任何地方.它们之间没有任何保证的关系,所以你不能假设someFunction会做任何有意义的事情.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |