Здраствуйте,
Попадаются в коде такие конструкции:
void fnc(void)
{
int *r;
//...
if()
*r = (int)r1; // r1 type: char
else
*r = (int)r2; // r2 type: short
//...
printf("%d", *r);
}
Обьясните пожалуста как это работает и работает ли вообще в плане выделения памяти/времени жизни/области видимости (когда выделяется память для результата преобразования, выделяется ли вообще, когда освобождается, может ли программа падать изза этого)?
Спасибо.
ПС: фикшу чужий код, расчитанный на компилируется под разные версии юникса/линукса, после портирования под новую (64-разрядную) версию с применением нового компилятора перлы типа приведения char* в int приводят к сегментейшн фолдам, хотя раньше вроде работало (но возможно дебаг-режим где есть такие преобразования никто раньше нормально не тестировал), есть и более замысловатые конструкции типа той что выше.