Необычное задание.
Есть функция:
void* PAS( int t)
{
return &t;
}
Результат ~ я имею указатель на пустое место, ибо локальная переменная t была деконструирована по завершению функции.
А мне по заданию необходимо использовать этот указатель.
Ограничения:
параметр функции нельзя заменить на int& или int*.
нельзя выделять новую память.
[ например return memcpy(malloc(sizeof(int)),&t,sizeof(int)) ]
нельзя объявлять статические переменные
[ static int f = t ; return &f ; ]
И вот в чем дело: надо каким-то образом заблокировать удаление(деструктуризацию) из памяти локальной переменной t, оставив за ней память.
Тогда и из возвращенного указателя я смогу получить значение.
Здравствуйте, 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>
S>И вот в чем дело: надо каким-то образом заблокировать удаление(деструктуризацию) из памяти локальной переменной t, оставив за ней память.
S>Тогда и из возвращенного указателя я смогу получить значение.
Подумать как правильно испоганить SP регистр?
Здравствуйте, 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: Плохая задача.