У меня есть эта программа:
double t;
main() {
}
В Ubuntu я запускаю:
% gdb a.out
(gdb) p &t
$1 = (double *) 0x4010 <t>
(gdb) run
Starting program: /home/phan/a.out
[Inferior 1 (process 95930) exited normally]
(gdb) p &t
$2 = (double *) 0x555555558010 <t>
Почему адрес изменился с 0x4010 на 0x555555558010. Есть ли способ предотвратить это? На Redhat это не так:
% gdb a.out
(gdb) p &t
$1 = (double *) 0x601038 <t>
(gdb) r
Starting program: /home/phan/a.out
[Inferior 1 (process 23337) exited normally]
(gdb) p &t
$2 = (double *) 0x601038 <t>
Кстати, это происходит только в Ubuntu 18.04. В Ubuntu 16.04 он работает точно так же, как Redhat, ie адрес один и тот же до и после.