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
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 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 }
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![]()
Partager