How to initialize const members of structs on the heap を参考に以下の様なプログラムを書きました。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

const int* make_immutable_point(int x){
  void *p = malloc(sizeof(const int));
  if (p == NULL) abort();

  const int temp = x;
  memcpy(p, &temp, sizeof(temp));

  return (const int*)p;
}

int main() {
    const int *f = make_immutable_point(10);
    *f=50; // エラー
    printf("%d,",*f);
}

メイン関数内で *f=50; のように記述するとエラーとなります。
これは const として値が確保されているからなのでしょうが、

なぜ、このように記述すると動的に const が確保できているのかがわかりません。