You're trying to do too much at once. Let's break this down to some simpler pieces first:
You've declared
LOCOPT *locopt
. Before you can use locopt itself as a pointer (or in array syntax) to anything, you have to allocate memory for it, eglocopt[locopt_ctr] = (LOCOPT *) calloc(1,sizeof(LOCOPT));
But that's only part of the effort.
If you want to store a list of items in each instance of locopt, then you need to call calloc again on the members of the newly allocated locopt instance :
locopt[locopt_ctr].org = (int *) calloc(M, sizeof(int));
locopt[locopt_ctr].des = (int *) calloc(N, sizeof(int));
Bottom line - if you've got a pointer, you've got to allocate it eventually.