有没有办法从另一个函数访问main中的变量?

时间:2019-01-08 18:25:01

标签: c++11

这个问题问我一个可以代替HUH的可能号码? ,这样它就可以打印问候世界,然后终止而没有任何错误。

我试图找出主函数中x的地址,并在doit函数中的局部变量x和主函数中x的地址之间使用了十六进制的减法,但无济于事。我有办法访问主函数中x的内容并将其值更改为0吗?

这样做会导致while循环停止运行并打印出“ Hello World”。

这是可行的方法吗?

void doit(void) {
  int x[1];
  x[HUH ? ] = 0;
}

int main(void) 
{
  int x = 1;
  while (x > 0) 
  {
    doit();
  }
  printf("hello world");
}

1 个答案:

答案 0 :(得分:2)

不。 x中唯一有效的索引是0。其他任何事件都将通过越界访问来触发undefined behaviour,否则将不使用x,因此您不会受到任何副作用。

例如,Clang 7 on Godbolt会完全忽略访问,并在所有情况下将doit优化为简单的ret

当然,除非您将副作用塞入索引表达式:

x[std::printf("hello world"), std::exit(0), 0] = 0;