Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Petit probleme de pointeur avec des threads ...

3 réponses
Avatar
David Roman
Mon probleme porte sur le champ TRec de la structure ResultDouble.
Je me fais des noeuds quelque part mais je ne sais pas ou.
Pouvez vous m'aider a trouver mon immondice de novice



typedef struct {
int errno;
int NbPkt;
int NbDle;
uint *TRec[2];
}Result;


void *thread1(void *Nb)
{
Result *ResultDouble;
uint *TRec[2];
int ifin=(int) Nb;
int i;

ResultDouble=malloc(sizeof(Result));
TRec[0]=malloc(ifin*sizeof(uint);
TRec[1]=malloc(ifin*sizeof(uint);

for (i=0;i<ifin;i++) {
TRec[0][i]=i;
TRec[1][i]=ifin-1-i;
}

ResultDouble->NbPkt=ifin;
ResultDouble->TRec[0]=TRec[0];
ResultDouble->TRec[1]=TRec[1];

pthread_exit(ResultDouble);
}


int main (void)
{

pthread_t thread_id;
Result *ResultDouble;
int Nb=10;

pthread_create(&thread_id,NULL,thread1,(void *) Nb);


for (i=0;i<10;i++) printf("%i
%i\n",ResultsDouble->TRec[0][i],ResultsDouble->TRec[1][i]);
}

3 réponses

Avatar
David Roman
David Roman wrote:

Mon probleme porte sur le champ TRec de la structure ResultDouble.
Je me fais des noeuds quelque part mais je ne sais pas ou.
Pouvez vous m'aider a trouver mon immondice de novice

typedef struct {
int errno;
int NbPkt;
int NbDle;
uint *TRec[2];
}Result;

void *thread1(void *Nb)
{
Result *ResultDouble;
uint *TRec[2];
int ifin=(int) Nb;
int i;

ResultDouble=malloc(sizeof(Result));
TRec[0]=malloc(ifin*sizeof(uint)); <= corrige
TRec[1]=malloc(ifin*sizeof(uint)); <= corrige

for (i=0;i<ifin;i++) {
TRec[0][i]=i;
TRec[1][i]=ifin-1-i;
}

ResultDouble->NbPkt=ifin;
ResultDouble->TRec[0]=TRec[0];
ResultDouble->TRec[1]=TRec[1];

pthread_exit(ResultDouble);
}

int main (void)
{

pthread_t thread_id;
Result *ResultsDouble; < > corrige
int Nb;

pthread_create(&thread_id,NULL,thread1,(void *) Nb);
pthread_join(thread_id,(void *) &ResultDouble); <= corrige


for (i=0;i<10;i++) printf("%i
%in",ResultsDouble->TRec[0][i],ResultsDouble->TRec[1][i]);
}


J'ai oublier 2 parentheses, l'appel a pthread_join() et 1 faute de
frappe

Avatar
Pascal Bourguignon
David Roman writes:

Mon probleme porte sur le champ TRec de la structure ResultDouble.
Je me fais des noeuds quelque part mais je ne sais pas ou.
Pouvez vous m'aider a trouver mon immondice de novice



typedef struct {
int errno;
int NbPkt;
int NbDle;
uint *TRec[2];
}Result;


void *thread1(void *Nb)
{
Result *ResultDouble;
uint *TRec[2];
int ifin=(int) Nb;
int i;

ResultDouble=malloc(sizeof(Result));
TRec[0]=malloc(ifin*sizeof(uint);
TRec[1]=malloc(ifin*sizeof(uint);

for (i=0;i<ifin;i++) {
TRec[0][i]=i;
TRec[1][i]=ifin-1-i;
}

ResultDouble->NbPkt=ifin;
ResultDouble->TRec[0]=TRec[0];
ResultDouble->TRec[1]=TRec[1];

pthread_exit(ResultDouble);
}


int main (void)
{

pthread_t thread_id;
Result *ResultDouble;
int Nb;

pthread_create(&thread_id,NULL,thread1,(void *) Nb);


Et qu'est ce qui dit au Monsieur que thread1 a eu le temps d'allouer
TRec? Si ça se trouve, le système a envoyé le thread thread1 sur
Mars, peut être que ce thread tourne sur une pomme de terre à 0.5
cycle par seconde? Peut être qu'il ne commencera à s'exécuter que dans
4 mn, et encore, on a de la chance en ce moment d'être si proche de
Mars!

Donc...: man pthread_cond_wait

for (i=0;i<10;i++) printf("%i
%in",ResultsDouble->TRec[0][i],ResultsDouble->TRec[1][i]);
}



--
__Pascal_Bourguignon__
http://www.informatimago.com/
Do not adjust your mind, there is a fault in reality.

Avatar
David Roman
Pascal Bourguignon wrote:

David Roman writes:

Mon probleme porte sur le champ TRec de la structure ResultDouble.
Je me fais des noeuds quelque part mais je ne sais pas ou.
Pouvez vous m'aider a trouver mon immondice de novice



typedef struct {
int errno;
int NbPkt;
int NbDle;
uint *TRec[2];
}Result;


void *thread1(void *Nb)
{
Result *ResultDouble;
uint *TRec[2];
int ifin=(int) Nb;
int i;

ResultDouble=malloc(sizeof(Result));
TRec[0]=malloc(ifin*sizeof(uint);
TRec[1]=malloc(ifin*sizeof(uint);

for (i=0;i<ifin;i++) {
TRec[0][i]=i;
TRec[1][i]=ifin-1-i;
}

ResultDouble->NbPkt=ifin;
ResultDouble->TRec[0]=TRec[0];
ResultDouble->TRec[1]=TRec[1];

pthread_exit(ResultDouble);
}


int main (void)
{

pthread_t thread_id;
Result *ResultDouble;
int Nb;

pthread_create(&thread_id,NULL,thread1,(void *) Nb);


Et qu'est ce qui dit au Monsieur que thread1 a eu le temps d'allouer
TRec? Si ça se trouve, le système a envoyé le thread thread1 sur
Mars, peut être que ce thread tourne sur une pomme de terre à 0.5
cycle par seconde? Peut être qu'il ne commencera à s'exécuter que dans
4 mn, et encore, on a de la chance en ce moment d'être si proche de
Mars!

Donc...: man pthread_cond_wait

for (i=0;i<10;i++) printf("%i
%in",ResultsDouble->TRec[0][i],ResultsDouble->TRec[1][i]);
}


--
__Pascal_Bourguignon__
http://www.informatimago.com/
Do not adjust your mind, there is a fault in reality.


Je te renvoie a mon 2eme post ...