en passant struct pour pthread comme argument

Ok je suis en train de passer une paire de nombres à travers struct à pthread_create fonction dans pthread. Mais les chiffres, je suis de passage et les chiffres que j'obtiens lorsque la fonction est appelée sont différents et aléatoires

Ici est la struct

struct Pairs {
    long i,j;
};

Et, à l'intérieur du

void main()
{
    long thread_cmp_count = (long)n*(n-1)/2;
    long t,index = 0;
    struct Pairs *pair;
    pair = malloc(sizeof(struct Pairs));

    cmp_thread = malloc(thread_cmp_count*sizeof(pthread_t));
    for(thread = 0;(thread < thread_cmp_count); thread++){
        for(t = thread+1; t < n; t++){
            (*pair).i = thread;
            (*pair).j = t;
            pthread_create(&cmp_thread[index++], NULL, Compare, (void*) pair);

        }
    }

    for(thread= 0;(thread<thread_cmp_count); thread++){
        pthread_join(cmp_thread[thread], NULL);
    }

    free(cmp_thread);
}

Et de la fonction Comparer

void* Compare(void* pair){
    struct Pairs *my_pair = (struct Pairs*)pair;
    printf("\nThread %ld, %ld", (*my_pair).i, (*my_pair).j);
    return NULL;
}

Nombre que je suis arriver et il est également aléatoire.

Thread 0,2
Thread 1,2
Thread 2,3
Thread 2,3
Thread 2,3
Thread 2,3

suis-je en passant la struct mal ?

Veuillez noter qu'en C, struct accède à l'aide d'un pointeur ne sont jamais écrit que (*foo).bar: au lieu d'utiliser foo->bar.

OriginalL'auteur Jos | 2013-11-25