Единственное, что я вижу, это то, что:
METADATA *md = (void*)(primDataPtr + (sizeof(METADATA) * x));
должно быть:
METADATA *md = (METADATA *)(primDataPtr + (sizeof(METADATA) * x));
Я думаю?
PS: ваш malloc
может также просто распределиться 200 * sizeof(METADATA)
.