Bonjour communauté,
Ca fait 20 ans que je n'ai plus programmé en C, et je me retrouve confronté à de vrais problèmes de débutants.
Voila, j'ai 3 tableaux de même taille qui contiennent à chaque case une structures quelconque (la même pour tous).
J'ai un tableau original, et 2 copies de celui-ci qui sont modifiées à tour de rôle par des thread
Dans cet exemple, les variables sont globales.
Le code :
Evidemment, il me dit à la ligne tmp[i] = tab[i] que y'a un conflit maStruct et *maStruct, ce que je peux entendre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #define TAILLE 10 typedef struct { int a; int b; int c;} maStruct; maStruct tab[TAILLE]; // tableau original maStruct tab1[TAILLE]; // tableau temporaire utilisable par les threads maStruct tab2[TAILLE]; // tableau temporaire utilisable par les threads maStruct ** currentTab; // adresse que les threads vont utiliser pour savoir sur quel tableau travailler. Pointera vers tab1 ou tab2 int traitement(int val) { return val + 1; /* traitement quelconque */} void Sort() { maStruct ** tmp; // structure temporaire indiquant le tableau sur lequelle je vais travailler dans cette fonction et qui est celui sur lequel les thread ne taperont pas if((maStruct**)currentTab == (maStruct**)&tab1) // si currentTab pointe vers tab1, alors je fais pointer tmp vers tab2 et inversement tmp = (maStruct **)&tab2; else tmp = (maStruct **)&tab1; for(uint8_t i = 0; i < TAILLE; i++) { tab[i].a = traitement(tmp[i]->b); // un traitement quelconque qui modifie l'original tmp[i] = tab[i]; // c'est la que j'ai un problème } }
Ce que je veux, c'est copier complètement le contenu de tab[i] à l'endroit pointé par tmp[i]...
Je pourrais faire tmp[i]->a = tab[i].a; tmp[i]->b = tab[i].b; etc...
Mais c'est pourrit, car je veux pouvoir modifier ma structure sans changer tout mon code !
Je n'arrive vraiment pas à me rappeler comment on se débrouille avec une situation pareille, et votre aide serait la bienvenue.
En vous remerciant par avance
merci de ne pas proposer de faire différemment ni de ne pas revenir sur le fait que j'utilise des variables globales plutôt que des paramètres ou autres questions de conception, ce n'est pas le problème ni même mon vrai code, c'est juste un truc que je viens d'écrire pour illustrer mon soucis.
Partager