Bonjour,
Je développe une application client-serveur simulant la gestion d'un compte bancaire. J'utilise RPC (Remote Procedure Call). Après avoir lancé mes programmes client et serveur sur deux machines, je reçois tout le temps un message:
Afin d'apporter plus de précision voici la partie de mon code qui, lorsque je l'ajoute, provoque cette erreur de segmentation:Segmentation fault (core dumped)
Côté client: (ce code fait appel au serveur pour récupérer les informations d'un compte client)
Côté Serveur:
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 Client_account *get_balance(int clnt_id) { CLIENT *clnt; Client_account *result_1; #ifndef DEBUG clnt = clnt_create(primary_server, RBSPROG, RBSVER, "netpath"); if (clnt == NULL) { clnt_pcreateerror(primary_server); return 0; } #endif result_1 = get_balance_1(clnt_id,clnt); if (result_1 == NULL) { clnt_perror(clnt, "call failed"); #ifndef DEBUG clnt_destroy(clnt); #endif return 0; } clnt_destroy(clnt); return result_1; }
Je conçois qu'il soit difficile de m'aider, n'ayant que des "morceaux" de mon code, mais si quelqu'un a une idée pour m'aider, je lui en serait vraiment reconnaissant car je bloque sur cette erreur depuis plusieurs heures
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 Client_account *get_balance_1_svc(clnt_id, rqstp) int clnt_id; struct svc_req *rqstp; { int max_data = 0; static Client_account account; FILE *fp; fp = fopen(DB_FILE,"rb"); memset(&account,0,sizeof(Client_account)); if (clnt_id <= 0) { return NULL; } fseek(fp,0,SEEK_END); max_data = ftell(fp)/sizeof(Client_account); /*if (clnt_id > max_data) { fclose(fp); return NULL; }*/ fseek(fp,(clnt_id-1)*sizeof(Client_account),SEEK_SET); /*if (clnt_id <= max_data)*/ { fread(&account,sizeof(Client_account),1,fp); } fclose(fp); return (&account); }
Merci beaucoup
Partager