tableau dynamique provenant d'une structure
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:
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:
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 :)