Это на * b = 110000;Потому что вы выделяете память для одного байта, а затем присваиваете ей целое число, которое составляет более одного байта.Либо у вас может быть b = (int *) malloc (sizeof (int)), либо вместо int * b вы можете использовать char * b, а затем приводить неверный указатель к char *.Код даже может работать, если вы назначите значение, которое меньше 128 (из-за знака со знаком) для * b.
РЕДАКТИРОВАТЬ: - Я думаю, иногда даже это будет работать без каких-либо хлопот.Потому что компилятор может выбрать более одного байта памяти для быстрого доступа к данным.