Есть ли способ доступа к переменной в main из другой функции? - PullRequest
0 голосов
/ 08 января 2019

Эта проблема спрашивает меня о возможном числе, которое я мог бы заменить HUH? с тем, что он печатает привет мир, а затем завершается без каких-либо ошибок.

Я попытался выяснить адрес x в основной функции и использовал некоторое шестнадцатеричное вычитание между локальной переменной x в функции doit и адресом 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 голосов
/ 08 января 2019

Нет. Единственный действительный индекс внутри x - это 0. Любой другой вызовет неопределенное поведение за пределами доступа, и x не используется в противном случае, поэтому вы не получите никакого побочного эффекта от него.

Например, Clang 7 на Godbolt полностью игнорирует доступ и во всех случаях оптимизирует doit до простого ret.

Если, конечно, вы не впишете побочный эффект в индексное выражение:

x[std::printf("hello world"), std::exit(0), 0] = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...