将变量按顺序保存到堆栈中

one*_*eno 0 c++ stack

我正在尝试编写一个简单的程序来展示如何在堆栈上间接操作变量.在下面的代码中,一切都按计划工作:即使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)

Car*_*rum 9

您的代码导致未定义的行为.你不能将指针传递给a int然后只是从它中减去任意数量并期望它指向一些有意义的东西.编译器可以按照自己喜欢的顺序放置a,b以及c任何地方.它们之间没有任何保证的关系,所以你不能假设someFunction会做任何有意义的事情.