>>929

これ2回目のmallocをpでなくqにしてみたらどうなります?
p = (char *)malloc(4);
printf("%p\n", p);
q = (char *)malloc(4);
printf("%p\n", q);
こんな感じに。
二回目のmalloc()でpを壊していることが気になります。