>>309
ありがとうございます。ずばりそれが原因のようです。
ただ、uint16 n[2]; と違ってMALLOCで確保した領域ですので、自由に使えないのは少々不思議に感じます。
例えばこれが
p = MALLOC(8);
np = (int*)((char*)p + 1);
*np = 1;

np = (int*)((char*)p + 4);
であれば正しく動くことが保証されるものなのでしょうか?(>>305さんの発言から推測)