Pointeur vers un tableau multi dimensionnel de taille variable - C - Programmation
Marsh Posté le 10-12-2006 à 14:53:18
limpkin a écrit : Définir une struct avec à l'intérieur des tableau de taille variable >> On peut seulement définir un tableau de taille variable en fin de struct |
Pas forcément. Tu peux définir dans ta structure un pointeur que tu alloues dynamiquement avec du malloc
limpkin a écrit : - Dans ma struct définir un int*** qui pointerait vers mon tableau >> incompatible pointer type |
C'est tout à fait normal. En C, un débutant qui aborde les pointeurs a généralement tendance à s'imaginer que "tableau = pointeur" car c'est parfois écrit ainsi dans les livres. Ce n'est pas tout à fait exact. Cela n'est vrai que dans le cas d'un tableau à une dimension
int i[10] |
i est bien un pointeur sur un "int" autrement dit un "int *"
En revanche, dans un tableau à 2 ou plusieurs dimensions, style
int i[5][10] |
On a "i" qui est un tableau de pointeurs sur des tableaux de 10 int, c'est à dire un "int*[10]" et non un "int **". Pourquoi ? parce que la mémoire n'est qu'une liste de cases mises en continu et ne fait donc qu'une seule dimension. Il en résulte que si tu veux aller à la position "i[x][y]", le C remplacera ça par un décalage de "x * 10 + y".
Donc si tu passes ce "i" à une fonction et que tu déclares dans ta fonction "f(int **i)"; la fonction ne saura pas quelle est la "largeur" du tableau et ne saura donc pas aller à l'emplacement "[x][y]". Pour que ça marche, soit tu déclares "f(int i[5][10])", sois tu déclares "f(int* i[10])". Dans tout les cas, il faut que la fonction sache que le tableau a une largeur de 10.
En résumé, quand tu passes un tableau à plusieurs dimensions à une fonction, tu n'as le droit dans ta fonction de remplacer que la première dimension par une étoile. Le C a besoin de toutes les autres dimensions pour faire ses calculs de déplacement.
Pour ton problème, tu peux très bien passer "fd_in" à ton thread. Mais dans ton thread, tu dois écrire que "fd_in" est de type "int* [2]"
Marsh Posté le 10-12-2006 à 17:05:15
Merci, j'ai résolu le probleme en utilisant donc des calloc
Marsh Posté le 10-12-2006 à 11:18:33
Hello tout le monde!
Après des heures de recherche sur le net, je viens demander de l'aide ici:
Dans mon programme C, à l'intérieur d'une fonction j'ai des tableaux de taille
Il est important de savoir que nb_banques est determiné par un parametre extérieur à la fonction que je recupère.
Voila mon probleme: je dois passer plusieurs de ces tableaux en paramètre à un thread donc je dois passer à mon thread un pointeur.
Voici les solutions que j'ai essayé:
- Définir une struct avec à l'intérieur des tableau de taille variable >> On peut seulement définir un tableau de taille variable en fin de struct
- Dans ma struct définir un int*** qui pointerait vers mon tableau >> incompatible pointer type
Avez vous des idées? Merci