Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/05/2007, à 23:00

Sysko le prospecteur

[c] allocation dynamique d'un tableau de tableau via une fonction

BIen le bonsoir


j'ai à faire à un petit problème  lors de la création d'un  programme


j'ai  un fichier   "machin.txt "

avec dedans des  chiffres  ( et je dit bien des chiffres  , pas des nombres )   agencé de la manière suivante

0123456789
1234568900
1123345687
3221123211
etc...

ces chiffres je veux les recupéré dans un tableau  à deux dimension  du type   tableau[nbrChiffreParLign][nbrDeLigne]
via un fgetc  et un switch  ( la desus pas de problème  ,  avec un tableau de taile fixe  et  un fichier  cela marche correctement )
(  on fait un saut de ligne du tableau à chaque fois que le programme lit un '\n'  et on fini quand on rencontre EOF )


je voudrais  que le remplissage du tableau se fasse  via une fonction  qui  :

1 -  prenne un pointeur  en argument  ( du style  int**  futurtableau ) ( même si je ne sais pas combien de * mettre ^^ (  je pense que cela doit être comme cela

2-  lisent le fichier  et selon le nombre de caractère par ligne  ( avec toutes les lignes de même longueur pour un même fichier )   et le nombre de ligne ( idem  le nombre de ligne ne bougera pas durant l'éxécution du programme mais  il pourra différé selon  les fichiers )  ,  malloc   de la memoire   pour un tableau  à 2 dimensions  de taille adequate

3 - que je puissent réutiliser  ce tableau dans le main



donc si quelqu'un pouvait , par pure gentillesse  ,  me  donner une fonction  qui puisse faire cela  ou au moins quel type de pointeur utilisé  et   les malloc à faire   , j'en serais reconnaissant


sinon  j'ai deja trouver des moyens de contourner le problème en n'utilisant qu'un tableau  simple mais voulant progresser   j'aimerais donc cela m'intéresse vraiment de savoir comment on résoud ce problème de façon " honnête "


d'avance merci pour vos réponses éclairées


ps:  la totalité de mes tentatives m'ont donné un dépassement de mémoire  ( segmentation fault / core dumped )

Sysko

Dernière modification par Sysko le prospecteur (Le 05/05/2007, à 23:01)


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne

#2 Le 05/05/2007, à 23:21

hypno

Re : [c] allocation dynamique d'un tableau de tableau via une fonction

Il n'y a pas de fonction miracle qui fait ca.
Il va falloir la coder toi meme.

Commence par declarer ton tableau de pointeurs: int** tab
Ensuite tu l'alloue: tab = malloc(sizeof(*tab) * nbligne)
ensuite il faut allouer chaque ligne:
tab[0] = malloc(sizeof(int) * 10)
tab[1] = malloc(sizeof(int) * 10)
etc.
Avec un while(i < nbligne) donc

voila ton tableau a 2 dimensions est pret.

Ensuite tu traite les ligne une par une comme tu semble savoir le faire.
Retourne le tab pour recuperer ton tableau.
N'oublie pas de faire un free de chaque ligne du tableau ansi que du tab apres utilisation

#3 Le 06/05/2007, à 11:53

Watchwolf

Re : [c] allocation dynamique d'un tableau de tableau via une fonction

si tu alloue ton tableau dans la fonction il faut que tu passe 3 étoiles (***).

pseudo code c
fct(int ***t)
{
      int i;
      //recuperation de la largeut l et de la hauteur h
      *t = malloc(sizeof(int)*h);
       for(i = 0; i<h; i++)
           (*t)[i] = malloc(sizeof(int)*l);

tu peut aussi au debut faite int **t2 = *t; pour simplifier la suite

Hors ligne

#4 Le 06/05/2007, à 23:30

Sysko le prospecteur

Re : [c] allocation dynamique d'un tableau de tableau via une fonction

merci  donc voila    la partie d'allocartion de ma fonnction

fct  ( int  ***futurTableau  )

int ** t2 =  *futur tableau

t2 = malloc( sizeof(*t2)*nombreDeLigne); //  on alloue de la memoire
                                                                    // pour un tableau  de  "nombreDeligne " tableaux

       for(i = 0; i<nombreDeLigne; i++)
           t2[i] = malloc( sizeof(int) *longueur); // on donne à chaque tableau la taille d'une ligne de fichier

voila encore merci


Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles

Hors ligne