Сохранение локальной переменной
От: Sigmov  
Дата: 06.12.08 07:16
Оценка: :))
Необычное задание.
Есть функция:
void* PAS( int t)
{
    return &t;
}
Результат ~ я имею указатель на пустое место, ибо локальная переменная t была деконструирована по завершению функции.

А мне по заданию необходимо использовать этот указатель.

Ограничения:
параметр функции нельзя заменить на int& или int*.
нельзя выделять новую память.
[ например return memcpy(malloc(sizeof(int)),&t,sizeof(int)) ]
нельзя объявлять статические переменные
[ static int f = t ; return &f ; ]

И вот в чем дело: надо каким-то образом заблокировать удаление(деструктуризацию) из памяти локальной переменной t, оставив за ней память.
Тогда и из возвращенного указателя я смогу получить значение.
Re: Сохранение локальной переменной
От: LaptevVV Россия  
Дата: 06.12.08 08:32
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Необычное задание.

S>Есть функция:
S>
S>void* PAS( int t)
S>{
S>    return &t;
S>}
S>

А динамическую переменную использовать можно?
S>
S>void* PAS( int t)
S>{ int *p = new int(t);
S> return p;
S>}
S>
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Сохранение локальной переменной
От: nen777w  
Дата: 06.12.08 08:38
Оценка:
S>И вот в чем дело: надо каким-то образом заблокировать удаление(деструктуризацию) из памяти локальной переменной t, оставив за ней память.
S>Тогда и из возвращенного указателя я смогу получить значение.

Подумать как правильно испоганить SP регистр?
Re: Сохранение локальной переменной
От: Юрий Жмеренецкий ICQ 380412032
Дата: 06.12.08 10:33
Оценка: 1 (1)
Здравствуйте, Sigmov, Вы писали:

S>Необычное задание.

S>Есть функция:
S>
S>void* PAS( int t)
S>

...
S>А мне по заданию необходимо использовать этот указатель.
S>Ограничения:
S>параметр функции нельзя заменить на int& или int*.
Только эти типы нельзя? другие можно?

S>нельзя выделять новую память.

Ранее выделенную можно использовать?

S>нельзя объявлять статические переменные

глобальные?, TLS? может ли PAS быть членом класса/структуры?

S>И вот в чем дело: надо каким-то образом заблокировать удаление(деструктуризацию) из памяти локальной переменной t, оставив за ней память.

Это часть задачи ?

В условии ограничение только на malloc ? Если нет, то можно поиграться с alloca + inline(лучше __forceinline, компилятор какой?). Если PAS заинлайнится, то память, выделенная с помощью alloca будет освобождена в вызывающей функции(а не в PAS)

__forceinline  void* PAS(int n)
{
  int* p = (int*)::alloca(sizeof(n));
  *p = n;
  return p;
}


PS: Плохая задача.
Re: Сохранение локальной переменной
От: Кодт Россия  
Дата: 07.12.08 02:34
Оценка: +1
Здравствуйте, Sigmov, Вы писали:

S>А мне по заданию необходимо использовать этот указатель.


Приведи текст задания полностью.
Либо ты чего-то не понял, либо тот, кто задавал, дурак. Но телепатически это определить сложно.
Перекуём баги на фичи!
Re: Сохранение локальной переменной
От: bkat  
Дата: 07.12.08 11:06
Оценка:
Здравствуйте, Sigmov, Вы писали:

S>Необычное задание.


Интересно, откуда возникают такие идиотские задания...
Наверное это глючная PAS, которую поправить нельзя, но которую уже пользуют?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.