Если вы запускаете программу на последних ОС, таких как Linux, Mac или Windows, 50 не будут байтами, расположенными по адресу 50 в вашей физической памяти; это адрес в виртуальном пространстве.
Тогда ваш процесс (программа) имеет доступ только к очень ограниченному диапазону в этом виртуальном пространстве, который вряд ли будет 50; в этом случае ОС защищает от несанкционированного доступа и останавливает ваш процесс (segfault); в любом случае вы могли бы даже получить результат, который может быть или не быть правильным, это называется неопределенное поведение , и в этом случае лучше не полагаться на явно работающий исполняемый файл.
Чтобы получить прямой доступ к физической памяти, вам необходимо либо скомпилировать модуль ядра, либо загрузиться, например, с DOS-подобной ОС.
main.c: 6: 7: предупреждение: присваивание делает указатель из целого числа без приведения [-Wint-преобразование]
При этом вам нужно разыграть 50
как int *
, чтобы снять предупреждение.
b = (int *)50;