Hello tout le monde

Ceci est mon 1er post sur develloppez.com. Je me présente je m'apelle Malcon j'ai 18 ans et je suis un jeune programmeur.J'ai commencé la programmation en C il y a environ 1 an et demi.En ce moment je travaille sur un petit programme qui me permettra d'afficher des mesh. j'utilise SDL pour le fenetrage et OpenGL pour la gestion des graphisme.
Mon probleme est le suivant : j'ai un probleme de d'assignation d'un tableau dynamique provenant d'une structure a un autre tableau
J'ai declarer une structure "meshdata" qui va contenir quelque info pour l'affichage de l'object
la voila
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
typedef struct meshdata meshdata
struct meshdata
{
    char *filename; // le nom du fichier a charger
    int ncoord;  // le nombre de coordonnées présente dans le fichier
    int nvertex; // le nombre de vertex ( un vertex = 3 coordonées)
    int nfaces; // le nombre de face
    float location[3]; // la location de l'object
    float *ArrayXYZ; // tableau de float qui va contenir ttes les coordonnées
    int *ArrayF; // le tableau de int qui va contenir les index de face
}
Afin de charger un model j'ai ecris cette fonction
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
 
void Load3Dmesh(meshdata *data)
{
 
	int i = 0;
	int j = 0;
	int count = 1;
	int indexn = 0;  // le nombre de caracteres qui composent une coordonée
	char caractere = 0;
	char **arrayxyz = NULL; //pointeur de pointeur pour recupérer toute les coordonées
	char **farray = NULL; //pointeur de pointeur pour récuperer tous les index des faces
	FILE *mesh = NULL;
	mesh = fopen(data->filename, "r");
	if (mesh == NULL)
	{
		exit(1);
	}
 
	fscanf(mesh,"%d %d %d %f %f %f", &data->nvertex,&data->ncoord, &data->nfaces, &data->location[0], &data->location[1], &data->location[2]);
 
    arrayxyz = (char**)malloc(data->ncoord    * sizeof(char) );
    farray = (char**)malloc(data->nfaces * 3  * sizeof(char) );
 
	data->ArrayXYZ = ( float* )malloc( data->ncoord * sizeof (float) );
	data->ArrayF = ( int* )malloc( (data->nfaces * 3) * sizeof (int) );
 
    while(count)
    {
         caractere = fgetc(mesh);
         switch(caractere)
         {
               case ' ':arrayxyz[i] = (char *)malloc(sizeof(char) * indexn );i++;indexn = 0;break;
               case '\n': arrayxyz[i] = (char *)malloc(sizeof(char) * indexn );i++;indexn = 0;break;
               default : indexn++;break;
               case '#':  i = 0; indexn = 0;
                        while(i != data->nfaces * 3)
                        {
                            caractere = fgetc(mesh);
                            switch(caractere)
                            {
                            case ' ':farray[i] = (char *)malloc(sizeof(char) * indexn);i++;indexn = 0;break;
                            case '\n' : break;
                            default : indexn++;break;
                            }
                        }
         }
        if( i == data->nfaces * 3 )
        {
            count = 0;
        }
 
    }
    rewind(mesh);
   while(count)
   {
       caractere = fgetc(mesh);
       switch(caractere)
       {
           case ' ': i++;j = 0;break;
           case '\n': i++;j = 0;break;
           default : arrayxyz[i][j] = caractere; j++;break;
           case '#':
                while( i != data->nfaces*3)
                {
                    caractere = fgetc(mesh);
                    switch(caractere)
                    {
                        case '\n' : break;
                        case ' ' : i++;j = 0;break;
                        default : farray[i][j] = caractere;j++;break;
                    }
                }
       }
       if ( i == data->nfaces*3)
       {
           count = 0;
       }
   }
 
   for(i = 0; i < data->ncoord; i++)
   {
         ( data->ArrayXYZ)[i]  = atof(arrayxyz[i]);
         free(arrayxyz[i]);
         arrayxyz[i] = NULL;
   }
 
   for(i = 0; i < data->nfaces * 3; i++)
   {
       (data->ArrayF)[i]  = atoi( farray[i] );
         free(farray[i]);
         farray[i] = NULL;
   }
}

Les while sont la pour remplacer scanf. Je trouve scanf pas tres precis dans l'aquisition des données donc j'ai préférer choisir une methode differente
Mais la fonction plante j'obtiens une seg fault elle provient des 2 boucles for de la fin.Je sais pas comment je pourais mettre dans data->ArrayXYZ les valeurs des differentes coordonnées.
Je m'en remets a vous pour la resolution de mon probleme
Amicalement VenomX