Bonjour,
J'ai une méthode qui doit lire un fichier et en placer le contenu dans un tableau 2D. La taille de ce tableau n'est pas connue a-priori (elle se trouve dans le fichier).
Je ne veux pas utiliser de "return". Donc, je passe un pointeur en paramètre à cette méthode. Après avoir lu la taille que doit avoir ce tableau, elle réserve la mémoire avec "Malloc".
Le problème, c'est qu'apparemment, cette mémoire n'est allouée qu'au sein de cette méthode. Une fois que l'on en sort, cela ne fonctionne plus.
Après beaucoup de chipotages, j'ai résolu le problème en passant l'adresse de mon pointeur. Mais ceci alourdi sensiblement le code au niveau de l'utilisation intensive des * et &.
Pour illustrer, voici un bout de code simplifié, avec un tableau 1D.
Tout d'abord, un code qui ne fonctionne pas :
Puis ci-dessous, un code qui fonctionne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #include <stdio.h> #include <stdlib.h> void modif2(char * p){ p = malloc(sizeof(int)*10); p[5]=55; printf("%d\n",p[5]); } int main(void) { int * T2; modif2(T2); printf("%d\n",T2[5]); }
A l'exécution, on voit que le tableau reste correctement accessible hors de la fonction "modif1".
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 #include <stdio.h> #include <stdlib.h> void modif1(int ** p){ *p = malloc(sizeof(int)*10); (*p)[3]=44; printf("%d\n",(*p)[3]); } int main(void) { int * T1D; modif1(&T1D); printf("%d\n",T1D[3]); }
Ma question est de savoir si c'est bien cela que je devais faire, ou s'il y a une façon plus "propre" qui m'échappe.
J'aimerais aussi comprendre pourquoi il faut procéder de la sorte. Qu'est-ce qu'un pointeur au juste? Que possède-t-il d'autre comme informations qu'une adresse mémoire? Je sens que le pointeur est intimement lié à malloc et free, mais j'aimerais mieux comprendre ce qui ce trame derrière tout cela. Généralement, les tutoriels apprennent à programmer, mais n'entrent pas dans ce genre de détails...
D'avance, un grand merci pour votre aide!
Partager