Google m'a trouvé la doc, et elle confirme mes soupçons:
Les pointeurs timeTmp et portTmp doivent être libérés avec free().
Version imprimable
Google m'a trouvé la doc, et elle confirme mes soupçons:
Les pointeurs timeTmp et portTmp doivent être libérés avec free().
Encore merci pour ta réponse, j'ai regardé la doc, effectivement il faut liberer avec free... Mais pourquoi? je comprend pas bien...
La réponse la plus simple, c'est : Parce que la fonction les alloue avec malloc().
J'ai essayé ce que tu m'as dis mais sans resultat (pour le char**).
Par contre j'ai rajouter les free
Et comme ça ?
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 void lectureIni(int *time, int *port, char ** addIp) { c_inifile_init("gps.ini", NULL); { char *timeTmp = c_inifile_get_string("Gest-Parser Scanner", "Time", NULL); char *portTmp = c_inifile_get_string("Server", "Port", NULL); *time = atoi(timeTmp); *port = atoi(portTmp); *addIp = c_inifile_get_string("Server", "IP", NULL); free(timeTmp); free(portTmp); } c_inifile_close(); } int main() { int time; int port; char *addIp; lectureIni(&time, &port, &addIp); //... free(addIp); return 0; }
Ou encore:
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 #include <string> using namespace std; void lectureIni(int &time, int &port, string &addIp) { c_inifile_init("gps.ini", NULL); { char *timeTmp = c_inifile_get_string("Gest-Parser Scanner", "Time", NULL); char *portTmp = c_inifile_get_string("Server", "Port", NULL); char *ipTmp = c_inifile_get_string("Server", "IP", NULL); time = atoi(timeTmp); port = atoi(portTmp); addIp = ipTmp; //affectation d'un char* à une string: copie mais ne libère pas. free(timeTmp); free(portTmp); free(ipTmp); } c_inifile_close(); } int main() { int time; int port; string addIp; lectureIni(time, port, addIp); //... return 0; }
Merci mais ça me plante le prog...8O
Je comprend pas, ta premières solution ne compile pas, la deuxieme compile mais message d'erreur windows...
(au fait j'ai remplcé les atoi() par des strtol().
Si je commente addIp = ipTmp; ça passe.... :bug:
- Je suis surpris que la première version en compile pas. Peux-tu poster les erreurs ?
- Je suis surpris également. Tu peux essayer de remplacer par addIp.assign(ipTmp); pour voir si ça résout le problème...
Pour ta deuxieme solution avec addIp.assign(ipTmp); ça plante toujours
Pour la première voici les erreurs de compilo :
Eu....y'en a plus, j'ai due me foiré lors de mon premier essai...snif... vraiment désolé... :oops::oops::oops:
Mais par contre je n'ai rien dans addIp
Voici mon code à nouveau :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 void lectureIni(int *time, int *port, char ** addIp) { c_inifile_init("gps.ini", NULL); { char *timeTmp = c_inifile_get_string("Gest-Parser Scanner", "Time", NULL); *time = strtol(timeTmp, NULL, 0); char *portTmp = c_inifile_get_string("Server", "Port", NULL); *port = strtol(portTmp, NULL, 0); *addIp = c_inifile_get_string("Server", "IP", NULL); free (timeTmp); free (portTmp); } c_inifile_close(); }
Au fait, puisque qu'on fait un free sur les variable timeTmp et portTmp, les {} ne servent plus à rien non?Code:
1
2
3
4
5
6
7
8
9
10
11 int main() { int time; int port; char *addIp; lectureIni(&time, &port, &addIp); cout << time << endl; cout << port << endl; cout << addIp << endl; ... }
OUPS!!!! :oops::oops::oops::oops::oops:
Promis je tournerais 7 fois ma langue dans la bouche la prochaine fois, c'est bon, addIp a la bonne valeur, je m'étais trompé surj'avais mis "IP" au lieu de "Ip"...Code:*addIp = c_inifile_get_string("Server", "Ip", NULL);
Arg!