I have a problem to sort an array (dynamically allocated) in a structure. Firstly, the idea was to order the array i in the structure in an ascendant order. Then I was thinking to order the array i maintaining instead the array j with the same "relationship" obtained when it was constructed the initial structure. I try to work for the first idea, but without any result with qsort.So this is my code... Any ideas? I think there is a problem in the construction of the comparing function..
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int M =10;
int N =30;
int K = 10;
struct element {
int *i;
int *j;
int k;  
};
struct element *create_structure();
void print_element(struct element *);
int compare (const void *, const void * );
struct element * sort(struct element *);
main()
{
     srand(time(NULL));
     struct element *lista;
     int count;
     lista=create_structure();
     print_element(lista);
     printf("\n");
     lista=sort(lista);
}
 struct element *create_structure()
 {
         int aux1,aux2,count,load;
         struct element *structure;
         structure = (struct element *) malloc (M*sizeof(struct element *));
         structure->k=K;
         structure->i= (int *)malloc(structure->k*sizeof(int));
         structure->j=(int *)malloc (structure->k*sizeof(int));
            for (count = 0; count < K; count ++)
            {
               aux1=rand()%N;
               (structure->i)[count]=aux1;
                  do
                  {
                  aux2=rand()%N; 
                  }while(aux2==aux1);
               (structure->j)[count]=aux2;
            }
  return (structure);   
   }
   void print_element(struct element *lista)
   {
      int count;
      for(count = 0; count < K; count ++)
      {
         printf("%d     %d\n",lista->i[count],lista->j[count]);
      }
   }
   int compare(const void *a, const void *b)
     {
        struct element *ia = (struct element *)a; 
         struct element *ib = (struct element *)b; 
         int *ptr1=(ia->i);
         int *ptr2=(ib->i);
     return (*ptr1-*ptr2); 
     }
    struct element * sort(struct element *list)
     {
       qsort(list, sizeof(list->i)/ sizeof(int) , sizeof(list->i), compare);
      //qsort(list->i, K, sizeof(list->i), compare);
      print_element(list); 
      return (list);
     }
 
    