Bonjour,
Apres de longue recherche en vain je me desespere et me resigne a poster.
Voici mon probleme, au lancement de mon programme je recupere des donnees dans ma bdd et les insert dans un tableau structure. ayabt besoin de gagner un maximum de temps d'exec sur la bdd je ne tri mes donnees seulement apres avec qsort. Cependant me voici avec un 'segmentation fault'.
Voici mon code :
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
 
typedef struct {
  PIOSTRING type_name;
  PIOLONG type_id;
} FUSE_TYPE;
 
FUSE_TYPE *Type_id;
FUSE_TYPE *Type_name;
 
static int cmpfuse_type_id(const void *p1, const void *p2)
{
  FUSE_TYPE *tp1= (FUSE_TYPE *) p1;
  FUSE_TYPE *tp2= (FUSE_TYPE *) p2;
  return tp1->type_id - tp2->type_id;
}
static int cmpfuse_type_name(const void *p1, const void *p2)
{
  FUSE_TYPE *tp1= (FUSE_TYPE *) p1;
  FUSE_TYPE *tp2= (FUSE_TYPE *) p2;
  return tp1->type_name - tp2->type_name;
}
 
static void *FUSETYPE(){
 
    char command[4096];
    _PGresult *res=NULL;
    PIOMEnvironment *MyEnv=NULL;
    PIOErr MyErr=0;
    MyErr = PIOOpenDB("",&MyEnv);
    if (MyErr!=0) return (void*)-ENOENT;
 
    sprintf(command,"select type_name, type_id from dmc_types;");
 
    MyErr= _DBGetCommand(&res,command,MyEnv->ConnectionSec); //execution req
 
    int i;
 
    Nb_Type_id=_PQntuples(res); //nb occurences
    // initialisation de la taille de mes 2 tableaux
    Type_id = (FUSE_TYPE *) _PIOMALLOC(Nb_User_id*sizeof(FUSE_TYPE));
    Type_name = (FUSE_TYPE *) _PIOMALLOC(Nb_User_id*sizeof(FUSE_TYPE));
    // remplissage des tableaux
    for (i=0;i<Nb_User_id;i++) { 
	strcpy(Type_id[i].type_name, _PQgetvalue(res,i,0));
	strcpy(Type_name[i].type_name, _PQgetvalue(res,i,0));	
	Type_id[i].type_id=atol(_PQgetvalue(res,i,1));
	Type_name[i].type_id=atol(_PQgetvalue(res,i,1));
    }
 
    qsort(Type_id, Nb_Type_id, sizeof(FUSE_TYPE), cmpfuse_type_id);
    qsort(Type_name, Nb_Type_id, sizeof(FUSE_TYPE), cmpfuse_type_name);
    return 0;
}
 
int main(int argc, char *argv[])
{
    umask(0);
    FILE *fuselog=fopen("/tmp/fuse-log","w"); 
    fclose(fuselog);
 
    FUSETYPE();
 
    return fuse_main(argc, argv, &dmcfs_oper, NULL);
}
Si jamais une ame charitable peut m'aider
(desole pour les faute d'accent, je travail sur un clavier qwerty).
Merci par avance.