On ne fait un free() que sur un pointeur alloué avec malloc() et compagnie...
Pas sur un buffer local ou statique, ni sur un pointeur vers l'intérieur d'un buffer alloué avec malloc()...
sName est un pointeur vers l'intérieur d'un buffer local...
Version imprimable
On ne fait un free() que sur un pointeur alloué avec malloc() et compagnie...
Pas sur un buffer local ou statique, ni sur un pointeur vers l'intérieur d'un buffer alloué avec malloc()...
sName est un pointeur vers l'intérieur d'un buffer local...
Ha bin voila ... Me semblait bien ...
Et donc comme ip_adr recup la valeur d'un strdup bah il faut le free parce que le strdup alloue de la mémoire ... J'ai compris ^^
Bon voila donc c'est bien ce que je pensais avec
Ca fonctionneCode:sprintf(strchr(sName, '='), "%s", "\0");
mais avecCa ne fonctionne pas ...Code:*strchr(sName, '=') = "\0";
Voila et maintenant j'ai un autre probleme ...
infoServeur.sin_port = htons((unsigned short)port); Si je cast la valeur de port comme ca, je ne suis pas sencé recup la valeur en unsigned short ? :s
J'avais dit '\0', pas "\0"...
Vraiment désolé ... :-(
Meme l'adresse n'a pas l'air bonne ... Je recois une erreur avec le code 10049 ... Qui correspond a une mauvaise addresse ... OU alors c'est peut etre un mauvais port ... Je converti mal un *char en unsigned short ...
Mais comment transformer un *char en unsigned short ? :(
pfff quel emrde :(
On convertit une chaîne de caractère en nombre avec les fonctions standard strtol() (qui retourne un long) ou strtoul() (qui retourne un unsigned long).
Hum ... Voila ... Le probleme qui se presente maintenant :
Dans ma fonction il recup bien les valeur qu'il faut ... Et quand je les affiche c'est les bonnes (logique puisqu'il recup bien les valeurs) ...
Now quand j'arrive les valeur que je recup avec le retour de ma fonction, elles ne sont plus correct ... :s ...
Donc dans ma fonction, mes parametre ssont bien trouvé ... Une fois que je les affiches dans ma boucle principale (donc en dehors de ma fonction pour recup un mort dans un fichier), ils sont changé ... il reprend une autre partie du texte :(
C'est comme si tout était decallé d'une ligne :s
Est ce que c'est le strdup qui foire ?
return(strdup(sValue));
Mmmmh ... Non ce n'est pas le strdup qui foire ... Je viens d'essayer avec un bete
return(sValue);
Le probleme est toujours la ...
Médinoc Help :(
Ben je ne sais pas, moi...
Poste-donc la dernière version de ton code...
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 char* getconf(const char *name){ FILE *fichier; char sLine[1024]; char *sName = NULL; char *sValue = NULL; memset(sLine, 0x0, sizeof(sLine)); // Ouvre le fichier en lecture seule fichier = fopen("config.ini", "r"); // Si erreur ouverture fichier arret programme if(!fichier){ MessageBox(NULL,CONFIG,"Erreur ouverture fichier : fichier de config !",MB_OK|MB_ICONERROR); step = 3; } // On boucle ligne par ligne jusqu'a la fin du fichier while(fgets(sLine, (int)sizeof sLine, fichier) && sValue == NULL){ if(strchr(sLine, '=')){ sName = sLine; *strchr(sName, '=') = '\0'; if(!strcmp(sName, name)){ sValue = sName+strlen(sName)+1; MessageBox(NULL, sValue, "Erreur connexion : Hum",MB_OK|MB_ICONERROR); } } } if(sValue == NULL){ MessageBox(NULL,"Parametre non trouve.\nVerifiez le fichier config.ini",name,MB_OK|MB_ICONERROR); step = 3; } fclose(fichier); return(strdup(sValue)); }
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 char *ip_adr = NULL; char *port = NULL; ip_adr = getconf("ip"); port = getconf("port"); MessageBox(NULL, ip_adr, "Erreur connexion : IP0",MB_OK|MB_ICONERROR); MessageBox(NULL, port, "Erreur connexion : PORT0",MB_OK|MB_ICONERROR); infoServeur.sin_family = AF_INET; infoServeur.sin_addr.s_addr = inet_addr(ip_adr); // Indiquez l'adresse IP de votre serveur infoServeur.sin_port = htonl(strtoul(port,NULL,0)); // Port écouté du serveur free(ip_adr); ip_adr = NULL; free(port); port = NULL;
Ça y est, j'ai compris: Tu dois mettre le test sValue==NULL avant le test sur fgets().
Code:while(sValue == NULL && fgets(sLine, (int)sizeof sLine, fichier)) {
Balaize ... J'aurai jamais cru que ca pourrait avoir ce comportement la a cause de ca ... :s
Merci en tout ca ... Maintenant me reste a comprendre pourquoi il ne veut pas faire ma connection au socket serveur ... Humpff ... Apparement il prend mal les parametres pour
Code:
1
2
3
4 infoServeur.sin_family = AF_INET; infoServeur.sin_addr.s_addr = inet_addr(ip_adr); // Indiquez l'adresse IP de votre serveur infoServeur.sin_port = htonl(strtoul(port,NULL,0)); // Port écouté du serveur
C'est htons() pour le n° de port.
Merci beaucoup medinoc du temps que tu as passé avec mes problemes et moi ... J'ai l'impression que j'ai l'air con avec mes betes questions ... Parce que c'est con au final ...
Mais en tout cas ... Tu es baleize ...
Ets ce que ca te dérange si tu deviens mon cyberDieu ? :D
Lol merci :king: