This:
memcpy(&check, &structArrayToBeCheck, sizeof(structArrayToBeCheck));
is invalid because you're copying an array of structures into an array of pointers.
Keep in mind that the set of structures that you dynamically allocate is not contiguous. The array of pointers is contiguous, but they point to things that are separately alllocated.
Try:
for (i = 0; i != n ; i++) {
check[i] = malloc(sizeof(struct contain));
memcpy( check[i], ArrayToBeCheck[i], sizeof(ArrayToBeCheck[i]));
}
Also, if the structure copies are always allocated/deallocated as a block (like in your example), there's no need to allocate them separately. Just allocate enough space for the whole array:
struct contain *check = malloc(n*sizeof(struct contain));
memcpy( check, structArrayToBeCheck, sizeof(structArrayToBeCheck));
// do things with check[0], check[1], ... check[n-1]
free(check);